我的界面文件中有这个:
#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) 上完美运行,但我对我实际上想做的更多事情有疑问......它们是......
当应用程序第一次加载时,UIPickerView 被隐藏(在屏幕区域之外)。我尝试添加这一行(在
viewDidLoad
上),但它不起作用。_picker.frame = CGRectMake(0, 1000, 320, 216);
然后,当用户点击
buttonSelectPicker
按钮时,UIPickerView 就会显示。这行代码也不起作用:- (IBAction)buttonSelectPicker { [UIView beginAnimations:nil 上下文:NULL]; [UIView setAnimationDuration:0.3]; _pickerviewContainer.frame = CGRectMake(0, 289, 320, 216); [UIView提交动画]; }
当用户点击 UIPickerView 区域之外的任何位置时,它将隐藏 UIPickerView。我有这段代码可以关闭键盘,但我不知道如何修改以关闭 UIPickerView :
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { for (UIView * txt in self.view.subviews){ if ([txt isKindOfClass:[UITextField 类]]) { [txt 辞职第一响应者]; } } }
谢谢...
最佳答案
您基本上是在重新创建 inputView
的功能。 UIKit 允许您定义任何自定义输入法,而不仅仅是键盘,因此,您可以放置一个 UITextField
,并设置 inputView
如下:
UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 162)];
picker.dataSource = self;
picker.delegate = self;
self.textField.inputView = picker;
(选择器也可以从 Nib 加载)
然后使用常规方法处理文本字段
// Show keyboard/picker
[self.textField becomeFirstResponder]
// Dismiss keyboard/picker
[self.textField resignFirstResponder]
当文本字段成为第一响应者时,将显示选择器而不是键盘。我不知道这是否适合您的需求,但请将其视为另一种更清洁的方式。
关于ios - UIPickerView 动画隐藏和显示失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18778674/