web-dev-qa-db-ja.com

iOS 7のテキストフィールドのポップアップ/モーダルピッカー

標準のポップアップピッカーを実装する方法を見つけるのに多くの問題があります。多くのアプリの登録画面と同様に、ユーザーが誕生日テキストフィールドを選択すると、ユーザーが誕生日を選択し、完了をクリックすると、書式設定された日付がテキストフィールドに追加されるように、ポップアップピッカーが表示されます。これはそれほど難しいことではないように思えますが、iOS 7でこれを行う簡単で明確な標準的な方法はないようです。

インターネットを検索して、モーダルを使用するように言っている人、アクションシートと言っている人、ポップアップと言っている人、さらに別のビューコントローラと言っている人を見ました。

これを行うための標準的な方法は何か、それを実装する方法のスニペットを教えてもらえますか?

32
ChuckKelly

「標準」の方法は、ピッカーをテキストフィールドの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];
}
71
rdelmar

ActionSheetPicker-3.0 library はこれをかなりうまくやっているようです。

Date chooser

animation

16