UIPickerView でコンボボックスみたいな。
#import "ViewController.h" @interface ViewController () //PickerをStoryBordを使わずに生成するので、デリゲート用のプロトコルを事前に宣言しておく <UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource> { UIPickerView *testPickerView; } @property (weak, nonatomic) IBOutlet UITextField *textField1; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _textField1.delegate = self; testPickerView = [[UIPickerView alloc] init]; testPickerView.delegate = self; testPickerView.dataSource = self; testPickerView.showsSelectionIndicator = YES; testPickerView.backgroundColor = [UIColor magentaColor]; //PickerViewエリアの背景色 _textField1.inputView = testPickerView; //テキスト入力のキーボードに閉じるボタンを付ける // X,Y, witdh, height UIView* accessoryView =[[UIView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,40)]; // 40:閉じるボタンのバーの高さ accessoryView.backgroundColor = [UIColor greenColor]; // 閉じるボタンエリアの背景色となる // ボタンを作成する。 UIButton* closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // ボタンの位置 x= self.view.frame.size.width-100 とすることにより、右寄りに置いている // 位置を生成時に固定しているので、表示後に、縦横寸法が変わると、閉じるボタンが見えなくなってしまう closeButton.frame = CGRectMake(self.view.frame.size.width-100,10,100,20); [closeButton setTitle:@"close" forState:UIControlStateNormal]; //修正ここまで // クローズボタンを押したときによばれる動作を設定する。 [closeButton addTarget:self action:@selector(closeKeyboard:) forControlEvents:UIControlEventTouchUpInside]; // ボタンをViewに貼る [accessoryView addSubview:closeButton]; //accessoryViewをテキストフィールドに連結 _textField1.inputAccessoryView = accessoryView; /* hide undo, redo, paste button bar for textfield input view */ UITextInputAssistantItem* item = [_textField1 inputAssistantItem]; item.leadingBarButtonGroups = @[]; item.trailingBarButtonGroups = @[]; } - (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列目の選択された行数を取得 _textField1.text = [NSString stringWithFormat:@"%ld%ld%ld",(long)val0,(long)val1,(long)val2]; } //キーボードを閉じる -(void)closeKeyboard:(id)sender { //FirstResponderから外す [_textField1 resignFirstResponder]; } @end
これに、キャンセルボタン、Picker以外のオブジェクトがタップされたら、Pickerを消去できれば。。。
参考
UIPickerViewも下から出す。 | iPhoneアプリ備忘録
ios - UITextField inputView displays undo, redo, paste buttons - Stack Overflow