iOS - 显示在Storyboard而不是键盘中制作的UIPIckerView

时间:2014-03-12 10:15:21

标签: ios storyboard uipickerview

我需要显示UIPickerView而不是键盘以及取消/完成按钮。所以我创建了一个PickerViewController.h / .m并在Storyboard中构建了一个视图: enter image description here

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;    

但是当显示选择器时它是空的。是否可以使用故事板中的“独立”选择器或者我是否需要以编程方式创建它?

2 个答案:

答案 0 :(得分:1)

有一种内置方式可以显示带有工具栏的自定义键盘(包括选择器视图),它的行为就像系统键盘一样。

对于成为第一响应者的视图(可以是与系统键盘或任何自定义视图一样的文本视图)覆盖inputView属性(将是选择器视图)和inputAccessoryView (这将是工具栏)。

这样您就不需要制作自己的视图控制器,系统会处理演示(动画等),其行为与普通键盘一样。

如果您要使自定义视图成为第一响应者,请务必覆盖canBecomeFirstResponder以返回YES。

此处有更多信息:https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/InputViews/InputViews.html

答案 1 :(得分:0)

自己回答。

首先,我忘了将pickerView的dataSource / delegate附加到故事板中的PickerViewController - 这就是为什么它是空的。

接下来,(感谢@vokilam提供解决方案!) - 我发现了BAD_ACCESS错误(这意味着什么时候 nil 不应该)。所以我将pickerVC更改为self.pickerVC(在.h文件中添加了@property) - 现在一切正常!