我正在开发我的第一个应用程序(非常有学习经验)。在学习和阅读以及试用/错误后的今天,我能够以编程方式创建并填充UIPickerView,并在选择适当的UITextField时弹出它。
我的主ViewController
已设置UITableView
,并填充了一些JSON数据。在UITableView
上方我添加了一个子视图(下面称为FilterView
)我希望包含一些控制来过滤我的UITableView
(我不确定子视图是不是&t; t部分问题)。在代码中创建UIPickerView
(没有使用Storyboard)并在其中填入一些数据后,在我的子视图中使用相应的.inputView设置我的UITextField
(以触发{{1}我想让一切按照我想要的方式工作,并且要继续设置过滤我的`UITableView的先例。
所以这是我在storyboard中使用textfields的视图布局:
您会注意到我的主视图(称为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,但没有。
我错过了什么?对于冗长的帖子感到抱歉,非常感谢你,如果你做到这一点。
答案 0 :(得分:1)
我用虚拟标题运行你的代码,它对我有用。
我在代码摘录中遗漏的一件事是:
[self.view addSubview:_voltagePickerView];
其中self是视图控制器。
答案 1 :(得分:0)
而不是删除我认为我会回答,希望它能帮助别人。
我不得不更改模拟器中的硬件设置。我不知道为什么,但模拟器似乎被窃听。
在模拟器中取消选中Hardware => Keyboard => Connect Hardware Keyboard
解决了问题。