Nik*_*how 14 xcode objective-c choice uipickerview ios
我设立一个UIPickerView喜欢有选择选择一个,选项B,选项C等.我试图解释Apple的示例代码,但对于像我这样的初学者来说这似乎很难理解.如果可能的话,我也希望从选择器视图中选择将我带到另一个页面.
小智 47
对于每个初学者来说,显而易见的是,第一次理解这些东西是一件很乏味的事情.
无论如何,你知道如何使用UITableViews吗?你知道如何使用UITableViewDelegate和UITableViewDataSource?如果你的答案是肯定的,那么就想象UIPickerViews就像UITableViews(但记住它们不是UITableViewControllers).
比方说,我有一个UIPickerView:
UIPickerView *objPickerView = [UIPickerView new]; // You need to set frame or other properties and add to your view...you can either use XIB code...
Run Code Online (Sandbox Code Playgroud)
1)首先你需要分配delegate并dataSource到UIPickerView或者通过IB或代码.这取决于你的实现(所以这一步看起来非常类似于a UITableView,不是吗?)
像这样:
objPickerView.delegate = self; // Also, can be done from IB, if you're using
objPickerView.dataSource = self;// Also, can be done from IB, if you're using
Run Code Online (Sandbox Code Playgroud)
2)接下来,您需要定义部分的数量,如下所示:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
return 1; // Or return whatever as you intend
}
Run Code Online (Sandbox Code Playgroud)
2)然后你需要定义你需要的行数:
- (NSInteger)pickerView:(UIPickerView *)thePickerView
numberOfRowsInComponent:(NSInteger)component {
return 3;//Or, return as suitable for you...normally we use array for dynamic
}
Run Code Online (Sandbox Code Playgroud)
3)然后,定义行的标题(如果你有多个部分,那么每个部分的标题):
- (NSString *)pickerView:(UIPickerView *)thePickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [NSString stringWithFormat:@"Choice-%d",row];//Or, your suitable title; like Choice-a, etc.
}
Run Code Online (Sandbox Code Playgroud)
4)接下来,当有人点击某个元素时你需要获取该事件(因为你想导航到其他控制器/屏幕):
- (void)pickerView:(UIPickerView *)thePickerView
didSelectRow:(NSInteger)row
inComponent:(NSInteger)component {
//Here, like the table view you can get the each section of each row if you've multiple sections
NSLog(@"Selected Color: %@. Index of selected color: %i",
[arrayColors objectAtIndex:row], row);
//Now, if you want to navigate then;
// Say, OtherViewController is the controller, where you want to navigate:
OtherViewController *objOtherViewController = [OtherViewController new];
[self.navigationController pushViewController:objOtherViewController animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
这就是你需要的所有实现.
我将简要解释如何以编程方式实现
- (void)viewDidLoad {
[super viewDidLoad];
UIPickerView * picker = [UIPickerView new];
picker.delegate = self;
picker.dataSource = self;
picker.showsSelectionIndicator = YES;
[self.view addSubview:picker];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return 3;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
NSString * title = nil;
switch(row) {
case 0:
title = @"a";
break;
case 1:
title = @"b";
break;
case 2:
title = @"c";
break;
}
return title;
}
Run Code Online (Sandbox Code Playgroud)
基本上viewDidLoad我们正在创建并添加一个UIPickerView视图,告诉它我们的控制器既用作delegate和dataSource(你也可以在Interface Builder中执行此操作)
然后,我们正在实施以两个数据源的方法来告诉每个组件有多少成分,多少行pickerView先后分别numberOfComponentsinPickerView:与pickerView:numberOfRowsInComponent:
最后,我们实现了pickerView:titleForRow:forComponent:返回每行内容的委托方法.
如果要在选择行时自定义行为,则可以实现委托方法pickerView:didSelectRow:inComponent:- 顾名思义 - 每次选择行时都会调用该方法.
| 归档时间: |
|
| 查看次数: |
43173 次 |
| 最近记录: |