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

Posted

技术标签:

【中文标题】iOS 7中文本字段的弹出/模式选择器【英文标题】:Popup/modal picker for a text field in iOS 7 【发布时间】:2013-12-24 15:36:57 【问题描述】:

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

我在互联网上搜索过,有人说使用模式,有人说操作表,有人说弹出窗口,还有一些人说单独的视图控制器。

谁能告诉我执行此操作的标准方法是什么或如何实现它的 sn-p?

【问题讨论】:

【参考方案1】:

我认为“标准”的方式,是将选择器设置为文本字段的 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];

【讨论】:

这有帮助,但是不考虑它呢?就像在导致日期选择器消失的完成按钮中一样,这不会被认为是这样一个非常标准的东西吗?我希望我不要表现得不友好,你比我发现的任何其他事情都更有帮助,我只是在来自 android 后因缺乏资源而感到沮丧,因为 tuts 每年都不会贬值。 @ChuckKelly,您可以在 didSelectRow 方法中让文本字段辞职第一响应者。我已将其添加到我的答案中。 非常感谢,我接受了你的回答,但最后一件小事。作为这个弹出的视图不是我的故事板的一部分,如果我想要,我将如何添加一个完成按钮(我现在也知道 id add self.tf resignFirstResponder)我问 bc,如果你只是简单地向下滚动选择器,它会选择它所在的位置并关闭,这与选择值不完全相同。 @ChuckKelly,无法自定义选择器视图的外观。您可以在文本字段旁边添加一个完成按钮,然后将代码放在那里(或者在选择一个值之后,您可以在选择器上方的代码中添加一个完成按钮)。顺便说一句,你没有接受我的回答,你投了赞成票。您需要点击大空心箭头来接受答案。 您可以构造一个UIToolbar,并将其设置为文本字段的inputAccessoryView【参考方案2】:

ActionSheetPicker-3.0 library 似乎做得很好。

【讨论】:

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

以上是关于iOS 7中文本字段的弹出/模式选择器的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift 3 - UIDatePicker

关闭 popOver

日期选择器的弹出窗口显示错误的年份

如何将颤动的日期选择器值添加到文本字段?

将 UIPickerView 选择设置为 UITableViewCell 内的 UITextField

日期选择器在文本字段 iOS 8 上崩溃