工作了几天后,UITextField.inputView突然没有弹出UIPickerView

时间:2014-10-02 20:07:22

标签: ios objective-c cocoa-touch uipickerview

我正在开发我的第一个应用程序(非常有学习经验)。在学习和阅读以及试用/错误后的今天,我能够以编程方式创建并填充UIPickerView,并在选择适当的UITextField时弹出它。

我的主ViewController已设置UITableView,并填充了一些JSON数据。在UITableView上方我添加了一个子视图(下面称为FilterView)我希望包含一些控制来过滤我的UITableView(我不确定子视图是不是&t; t部分问题)。在代码中创建UIPickerView(没有使用Storyboard)并在其中填入一些数据后,在我的子视图中使用相应的.inputView设置我的UITextField(以触发{{1}我想让一切按照我想要的方式工作,并且要继续设置过滤我的`UITableView的先例。

所以这是我在storyboard中使用textfields的视图布局: enter image description here

您会注意到我的主视图(称为UIPickerView),包含其中所有控件的子视图(称为View),以及我的FilterView以下所有内容。然后我在我的UITableView中创建了我的三个选择器UIPickerViews,设置了DataSource和Delegate,并将inputView设置为我想要的文本字段:

viewDidLoad

当然UIPickerView属性在我的_voltagePickerView = [[UIPickerView alloc] initWithFrame:CGRectZero]; [_voltagePickerView setDataSource: self]; [_voltagePickerView setDelegate: self]; _voltagePickerView.showsSelectionIndicator = YES; _voltageFilterField.inputView = _voltagePickerView; //same for other 3 文件中,以及ViewController.h的出口:

UITextField

还设置了PickerView的所有方法:

@property (strong, nonatomic) UIPickerView *rpmPickerView;
@property (strong, nonatomic) UIPickerView *voltagePickerView;
@property (strong, nonatomic) UIPickerView *noiseLevelPickerView;

@property (strong, nonatomic) IBOutlet UITextField *voltageFilterField;
@property (strong, nonatomic) IBOutlet UITextField *rpmFilterField;
@property (strong, nonatomic) IBOutlet UITextField *noiseLevelFilterField;

所有这些都可行!我将运行该项目,TableView将填充,我可以单击相应的TextField,以显示填充了正确数据的相应PickerView。

然后......我改变的唯一一件事(我能想到的)是改变我的一个UITextFields的PlaceHolderText属性......就是这样,我可能也将TextFields排成一行看起来更好。然后我运行了项目,当我点击TextField时,Pickers不显示。我检查了Outlets的TextViews和PickerFields,都是一样的。我甚至删除了TextViews的Reference Outlets并重新创建它们。什么都没有。

老实说,我不知道发生了什么。除了// PickerViews // -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; } -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if ([pickerView isEqual: _voltagePickerView]) { return voltagePickerValues.count; } else if () { //Rest of PickerView rows } else { return 0; } } -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { NSString *title; if ([pickerView isEqual: _voltagePickerView]) { title = [voltagePickerValues objectAtIndex:row]; } else if { //Rest of Picker Views } else { title = nil; } return title; } 之一的PlaceHolderText属性之外,其他所有内容都与以前完全相同。

我已经清理并重建了我的项目,重新启动了xcode甚至我的mac,但没有。

我错过了什么?对于冗长的帖子感到抱歉,非常感谢你,如果你做到这一点。

2 个答案:

答案 0 :(得分:1)

我用虚拟标题运行你的代码,它对我有用。

我在代码摘录中遗漏的一件事是:

[self.view addSubview:_voltagePickerView];

其中self是视图控制器。

答案 1 :(得分:0)

而不是删除我认为我会回答,希望它能帮助别人。

我不得不更改模拟器中的硬件设置。我不知道为什么,但模拟器似乎被窃听。

在模拟器中取消选中Hardware => Keyboard => Connect Hardware Keyboard解决了问题。