UIPickerView 动画隐藏和显示失败



>我的接口文件上有这个:

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
    <UIPickerViewDataSource, UIPickerViewDataSource>
// PickerView Array
@property (strong, nonatomic) NSArray *pickerNames;
@property (strong, nonatomic) NSArray *pickerValues;    
@property (strong, nonatomic) IBOutlet UIPickerView *picker;
- (IBAction)buttonSelectPicker;
@end

我的实现文件中有这个:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // PickerView Array
    _pickerNames = @[@"Data1", @"Data2", @"Data3", @"Data4", @"Data5"];
    _pickerValues = @[@"val1", @"val2", @"val3", @"val4", @"val5"];
    _picker.frame = CGRectMake(0, 1000, 320, 216);
}

所有这些代码现在都可以在我的iPod(iOS 6.1.3)上运行,我对实际上想要做的事情有问题......他们是...

  1. 首次加载应用时,UIPickerView 处于隐藏状态(屏幕区域之外)。我尝试添加此行(在viewDidLoad上),但它不起作用。

    _picker.frame = CGRectMake(0, 1000, 320, 216);

  2. 然后当用户点击buttonSelectPicker按钮时,UIPickerView 就会出现。 这行代码也不起作用:

    - (IBAction)buttonSelectPicker { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.3]; _pickerviewContainer.frame = CGRectMake(0, 289, 320, 216); [UIView commitAnimations]; }

  3. 当用户点击UIPickerView
  4. 区域之外的任何地方时,它将隐藏UIPickerView。我有这段代码来关闭键盘,但我不知道如何修改以关闭 UIPickerView:

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { for (UIView * txt in self.view.subviews){ if ([txt isKindOfClass:[UITextField class]]) { [txt resignFirstResponder]; } } }

谢谢。。。

你基本上是在重新创建inputView所做的事情。UIKit允许您定义任何自定义输入法,而不仅仅是键盘,因此,您可以放置一个UITextField,并按如下方式设置inputView

UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 162)];
picker.dataSource = self;
picker.delegate = self;
self.textField.inputView = picker;

(拾取器也可以从笔尖加载)

然后使用常规方法处理文本字段

// Show keyboard/picker
[self.textField becomeFirstResponder]
// Dismiss keyboard/picker
[self.textField resignFirstResponder]

当文本字段成为第一响应者时,将显示选取器而不是键盘。我不知道这是否适合您的需求,但将其视为另一种更清洁的方式。

简单地说,你可以使用:

  self.dataPicker.hidden=NO; and 
  self.dataPicker.hidden=YES;

在适当的情况下。

更新: 将 UIPicker 放在另一个视图上,然后使用

[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
            self.infoView.frame = CGRectMake(0 , 70,  self.infoView.frame.size.width,  self.infoView.frame.size.height);
        }
                         completion:^(BOOL finished) {
                         }];

其中 infoView 是新 UIView 的名称。您需要调用视图动画方法两次以隐藏(将其移出视图控制器)并显示视图并相应地更改 X,Y 协同。

最新更新