iOS 7中文本字段的弹出/模态选择器

33

我一直很困扰如何实现标准的弹出选择器。就像许多应用程序的注册屏幕一样,当用户选择生日文本字段时,我希望出现一个弹出选择器,以便用户可以选择他们的生日,单击完成后,格式化日期将添加到文本字段中。这似乎并不应该很难,但是在iOS 7中似乎没有简单、清晰、标准的方法。

我已经在互联网上搜索过一些东西,有些人说要使用模态视图,其他人说要使用操作表,还有人说要使用弹出窗口,还有人说要使用单独的视图控制器。

有谁能告诉我这个标准的方法是什么,或者提供一个代码片段来实现它吗?

2个回答

76

我认为“标准”的方法是将选择器设置为文本字段的inputView。

UIPickerView *picker = [[UIPickerView alloc] init];
self.textField.inputView = picker;

当你在文本框中输入时,它将从底部弹出,就像键盘一样。

以下是一个简单的示例,演示如何使用选择器作为输入视图:

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *tf;
@property (strong,nonatomic) NSArray *theData;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UIPickerView *picker = [[UIPickerView alloc] init];
    picker.dataSource = self;
    picker.delegate = self;
    self.tf.inputView = picker;
    self.theData = @[@"one",@"two",@"three",@"four"];
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return self.theData.count;
}

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return  1;
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return self.theData[row];
}

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    self.tf.text = self.theData[row];
    [self.tf resignFirstResponder];
}

1
这个有帮助,但是如何取消呢?比如一个完成按钮,可以让日期选择器消失,这不是一个相当标准的功能吗?我希望自己没有显得不懂感恩,你给我的帮助比其他任何资源都要更有用,我只是在从Android转换过来之后感到对这些东西缺乏资源而感到沮丧,因为每年教程都会过时。 - ChuckKelly
非常感谢,我接受了你的答案,但还有最后一点小事。由于这个弹出视图不是我的故事板的一部分,如果我想要添加一个“完成”按钮(现在我知道我会添加self.tf resignFirstResponder),我该怎么做?我问这个问题是因为如果你只是简单地滚动选择器,它会选择它所停留的任何内容并关闭,这与选择一个值并不完全相同,可能会有些烦人。 - ChuckKelly
@ChuckKelly,无法自定义选择器视图的外观。您可以在文本字段旁边添加一个“完成”按钮,然后在那里放置代码(或在选择值后,您可以在选择器上方的代码中添加一个“完成”按钮)。顺便说一句,您没有接受我的答案,而是点了赞。您需要点击大的空心箭头来接受答案。 - rdelmar
@ChuckKelly,苹果的文档说你不能这样做,所以要么他们正在自己开发,要么他们正在呈现一个包含选择器视图和按钮的自定义视图。 - rdelmar
5
您可以创建一个UIToolbar并将其设置为文本框的inputAccessoryView - dokkaebi
显示剩余3条评论

16

我无法从当前的git克隆中构建它。 Xcode 7.2.1给了我:dyld`dyld_fatal_error: -> 0x120055088 <+0>:brk #0x3 - Chris Prince

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接