我需要显示UIPickerView而不是键盘以及取消/完成按钮。所以我创建了一个PickerViewController.h / .m并在Storyboard中构建了一个视图:
PickerViewController.h :
@interface PickerViewController : UIViewController <UIPickerViewDataSource,UIPickerViewDelegate>;
@property NSArray *data;
PickerViewController.m 有选择器委托方法:
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [self.data objectAtIndex:row];
}
-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
return 25;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
}
现在我正在尝试在另一个ViewController中使用它来显示编辑文本字段:
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main"
bundle: nil];
PickerViewController *pickerVC = (PickerViewController*)[mainStoryboard
instantiateViewControllerWithIdentifier: @"PickerViewController"];
pickerVC.data = @[@"house",@"land",@"office"];
UIView *picker = pickerVC.view;
picker.frame = CGRectMake(0, 0, 320, 210);
self.textFieldRealtyType.inputView = picker;
但是当显示选择器时它是空的。是否可以使用故事板中的“独立”选择器或者我是否需要以编程方式创建它?
答案 0 :(得分:1)
有一种内置方式可以显示带有工具栏的自定义键盘(包括选择器视图),它的行为就像系统键盘一样。
对于成为第一响应者的视图(可以是与系统键盘或任何自定义视图一样的文本视图)覆盖inputView
属性(将是选择器视图)和inputAccessoryView
(这将是工具栏)。
这样您就不需要制作自己的视图控制器,系统会处理演示(动画等),其行为与普通键盘一样。
如果您要使自定义视图成为第一响应者,请务必覆盖canBecomeFirstResponder
以返回YES。
答案 1 :(得分:0)
自己回答。
首先,我忘了将pickerView的dataSource
/ delegate
附加到故事板中的PickerViewController - 这就是为什么它是空的。
接下来,(感谢@vokilam提供解决方案!) - 我发现了BAD_ACCESS错误(这意味着什么时候 nil 不应该)。所以我将pickerVC
更改为self.pickerVC
(在.h文件中添加了@property) - 现在一切正常!