Nik*_*how 14 xcode objective-c choice uipickerview ios
我设立一个UIPickerView
喜欢有选择选择一个,选项B,选项C等.我试图解释Apple的示例代码,但对于像我这样的初学者来说这似乎很难理解.如果可能的话,我也希望从选择器视图中选择将我带到另一个页面.
小智 47
对于每个初学者来说,显而易见的是,第一次理解这些东西是一件很乏味的事情.
无论如何,你知道如何使用UITableView
s吗?你知道如何使用UITableViewDelegate
和UITableViewDataSource
?如果你的答案是肯定的,那么就想象UIPickerView
s就像UITableView
s(但记住它们不是UITableViewController
s).
比方说,我有一个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 次 |
最近记录: |