我将如何设置 UIPickerView? [关闭]

Posted

技术标签:

【中文标题】我将如何设置 UIPickerView? [关闭]【英文标题】:How would I set up a UIPickerView? [closed] 【发布时间】:2012-11-25 05:57:02 【问题描述】:

我正在设置一个UIPickerView 以提供choice achoice bchoice c 等选项。我试图解释来自 Apple 的示例代码,但对于像我这样的初学者来说似乎很难理解。如果可能的话,我还希望选择器视图中的选项将我带到另一个页面。

【问题讨论】:

发布您的暂定代码并解释失败的地方。 我们有大量的资源可以在互联网上学习。在这里提出问题之前,您必须先做一些研究并尝试一些东西,然后如果您遇到任何问题,那么这里就是您的最佳选择。试试这个链接iphonesdkarticles.com/2009/01/…. iPhone UIPickerView in UIViewController的可能重复 【参考方案1】:

很明显,对于每个初学者来说,第一次理解这些东西有些乏味。

对了,你知道UITableViews怎么用吗?你知道UITableViewDelegateUITableViewDataSource怎么用吗?如果你的答案是肯定的,那么想象一下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...

1) 首先,您需要通过 IB 或代码将 delegatedataSource 分配给 UIPickerView。这取决于您的实现(所以这一步看起来与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

2) 接下来,您需要定义部分的数量,如下所示:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView 
     return 1;  // Or return whatever as you intend

2) 然后你需要定义你需要的行数:

- (NSInteger)pickerView:(UIPickerView *)thePickerView 
numberOfRowsInComponent:(NSInteger)component 
     return 3;//Or, return as suitable for you...normally we use array for dynamic

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.

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];


这就是您需要的所有实现。

【讨论】:

作为一个刚接触Objective C的人,我不知道什么是IB:// Also, can be done from IB, if you're using【参考方案2】:

我将简要解释如何以编程方式实现这一目标

- (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;

基本上在viewDidLoad 中,我们创建并添加UIPickerView 到视图中,告诉它我们的控制器同时充当delegatedataSource(您也可以在Interface Builder 中执行此操作)

然后我们实现了两个数据源方法,以分别numberOfComponentsinPickerView:pickerView:numberOfRowsInComponent: 告诉pickerView 有多少组件和每个组件有多少行

最后我们实现了返回每一行内容的委托方法pickerView:titleForRow:forComponent:

如果您想在选择行时自定义行为,您可以实现委托方法pickerView:didSelectRow:inComponent:,顾名思义,每次选择行时都会调用该方法。

【讨论】:

别忘了设置框架。【参考方案3】:

UIPickerView 使用的部分类似于 UITableView 的使用。 DataSourceDelegate 协议。

DataSource 方法用于告诉选择器您的选择器中有多少“列”和多少“行”。 而 Delegate 方法用于其余部分,行高、列宽、要显示的视图或标题以及选择器移动时的回调。UIPickerView

【讨论】:

以上是关于我将如何设置 UIPickerView? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JSON 数组填充 UIPickerView? [关闭]

如何在 uitextfield 中隐藏 UIPickerView?

我将如何更改 CPPickerView(一个简单的 UIPickerView 替换)以使用清晰的背景而不是图像?

iOS:UIPickerView 默认尺寸

Swift - 如何从 UIPickerView 生成数据的许多 UITextField 中读取数据 [关闭]

使用 UIToolBar 上的完成按钮关闭 UIPickerView