前回のUIPickerViewを2つ表示しました。
参考サイトは、前回と同じくコチラです。
テキストフィールドをタップして、キーボードの代わりにpickerViewやdatePickerを出す – デビューが遅すぎたびび子ママのプログラム奮闘記
【Xcode】PickerViewを1つのビューで2つ〜複数設置する | iDEA CLOUD/dev
Storyboardでテキストフィールドを2つ作り、ViewContorollerとつなぎます。
UIPickerViewにタグを付けて複数に対応しています。
列数、行数、表示する文字列の指定をUIPickerViewごとに変えるにはifかswichで対応します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
#import "ViewController.h" @interface ViewController ()<UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource> { UIPickerView *testPickerView; UIPickerView *testPickerView2; } @property (weak, nonatomic) IBOutlet UITextField *textField1; @property (weak, nonatomic) IBOutlet UITextField *textField2; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _textField1.delegate = self; _textField2.delegate = self; testPickerView = [[UIPickerView alloc] init]; testPickerView.delegate = self; testPickerView.dataSource = self; testPickerView.tag = 0; testPickerView.showsSelectionIndicator = YES; testPickerView2 = [[UIPickerView alloc] init]; testPickerView2.delegate = self; testPickerView2.dataSource = self; testPickerView2.tag = 1; testPickerView2.showsSelectionIndicator = YES; _textField1.inputView = testPickerView; _textField2.inputView = testPickerView2; //テキスト入力のキーボードに閉じるボタンを付ける UIView* accessoryView =[[UIView alloc] initWithFrame:CGRectMake(0,0,320,50)]; accessoryView.backgroundColor = [UIColor clearColor]; // ボタンを作成する。 UIButton* closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; closeButton.frame = CGRectMake(self.view.frame.size.width-120,10,100,30); [closeButton setTitle:@"閉じる" forState:UIControlStateNormal]; // ボタンを押したときによばれる動作を設定する。 [closeButton addTarget:self action:@selector(closeKeyboard:) forControlEvents:UIControlEventTouchUpInside]; // ボタンをViewに貼る [accessoryView addSubview:closeButton]; //あとはこれを使いたいテキストフィールドに代入すればいいだけ!便利! _textField1.inputAccessoryView = accessoryView; _textField2.inputAccessoryView = accessoryView; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView { return 3; //列数 } - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { return 10; //行数 } - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { //ピッカーに表示する値 switch (component) { case 0: // 1列目 return [NSString stringWithFormat:@"%ld", (long)row]; break; case 1: // 2列目 return [NSString stringWithFormat:@"%ld", (long)row]; break; case 2: // 3列目 return [NSString stringWithFormat:@"%ld", (long)row]; break; default: return 0; break; } } - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { NSInteger val0 = [pickerView selectedRowInComponent:0]; // 1列目の選択された行数を取得 NSInteger val1 = [pickerView selectedRowInComponent:1]; // 2列目の選択された行数を取得 NSInteger val2 = [pickerView selectedRowInComponent:2]; // 3列目の選択された行数を取得 NSUInteger tag = [pickerView tag]; if (tag == 0) { //一つ目のテキストフィールド _textField1.text = [NSString stringWithFormat:@"%ld%ld%ld",(long)val0,(long)val1,(long)val2]; } else if (tag == 1) { //二つ目のテキストフィールド _textField2.text = [NSString stringWithFormat:@"%ld%ld%ld",(long)val0,(long)val1,(long)val2]; } } //キーボードを閉じる -(void)closeKeyboard:(id)sender { [_textField1 resignFirstResponder]; [_textField2 resignFirstResponder]; } @end |
ま、いろんなやり方がありますよね。