2013-12-07 2 views
28

У меня много проблем, когда вы узнаете, как реализовать стандартный всплывающее окно. Как и во многих окнах регистрации приложений, когда пользователь выбирает идентификатор поля дня рождения, как всплывающее меню, чтобы отобразить его, чтобы пользователи могли выбрать день рождения, нажмите «Готово», и форматированная дата будет добавлена ​​в текстовое поле. Это не похоже, что все должно быть так сложно, похоже, нет простого, понятного и стандартного способа сделать это в ios7. Я искал в Интернете и видел некоторые высказывания, чтобы использовать модальные, другие говорят, что таблицы действий, другие говорят всплывающие окна, а третьи говорят, что отдельный контроллер просмотра. Может кто-нибудь сказать мне, что стандартный способ сделать это и/или предоставить ссылку на tut или фрагмент о том, как его реализовать?Pop-up/Modal picker для текстового поля в IOS7

ответ

67

Я думаю, что «стандартный» способ состоит в том, чтобы установить сборщик в качестве входного вида текстового поля.

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

это помогло, но что отвергая его? как в сделанной кнопке, которая заставляет datepicker уходить, разве это не считалось бы довольно стандартной частью чего-то подобного? Я надеюсь, что я не оторвусь от невообразимого, но был более полезен, чем что-либо еще, и я обнаружил, что он просто разочарован отсутствием ресурсов на этом материале после того, как он пришел с android, где tuts не обесценивают каждый год. – ChuckKelly

+0

@ChuckKelly, вы можете просто оставить текстовое поле первым ответчиком в методе didSelectRow. Я добавил это к моему ответу. – rdelmar

+0

Большое вам спасибо, я принял ур ответ, но 1 последняя мелочь. это представление, которое всплывает, не является частью моей раскадровки, как именно я бы добавил кнопку «done», если бы захотел (теперь я знаю id add self.tf resignFirstResponder). Я прошу bc, может быть, это немного раздражает некоторых, если вы просто прокрутите сборщик вниз, он выбирает все, на что он приземляется, и закрывается, и это не совсем то же самое, что выбрать значение. – ChuckKelly

15

ActionSheetPicker-3.0 library, кажется, делает это очень хорошо.

Date chooser

animation

+0

Я не могу получить это, чтобы построить из текущего git-клона. Xcode 7.2.1 дает мне: dyld'dyld_fatal_error: -> 0x120055088 <+0>: brk # 0x3 –

Смежные вопросы