【问题标题】:UIPickerView Animation Hide and Show FailedUIPickerView 动画隐藏和显示失败
【发布时间】:2013-09-13 13:46:07
【问题描述】:

我的接口文件中有这个:

#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 区域外的任何地方时,它会隐藏 UIPickerView。我有这段代码可以关闭键盘,但我不知道如何修改以关闭 UIPickerView :

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

谢谢...

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    您基本上是在重新创建 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]
    

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

    【讨论】:

      【解决方案2】:

      你可以使用:

        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 坐标。

      【讨论】:

      • 它有效,兄弟。但是我们可以在上面放一些动画延迟吗?因为它看起来像是突然出现在屏幕上。
      • 我尝试像这样应用你的代码,它只动画一次: - (IBAction)buttonSelectMLM { [UIView animateWithDuration:0.33 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ self.picker.frame = CGRectMake (0, 70, self.picker.frame.size.width, self.picker.frame.size.height); self.picker.hidden = 否; } 完成:^(BOOL 完成) { }]; }
      • @RobertHanson:检查最后两行答案。
      猜你喜欢
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      相关资源
      最近更新 更多