重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

pickerViewを、画面のどこかをタップすることで隠すには
どのようにすればよろしいでしょうか。

現在のコードです。
TextFieldの代わりにピッカーを出すという実装です。

ヘッダー

@property(nonatomic,weak)IBOutlet UITextField *textField;
@property(nonatomic,strong)UIPickerView *pickerView;
@property(nonatomic,strong)NSArray *items;

メイン

- (void)viewDidLoad
{
self.items = @[@"A",@"B",@"C",@"D"];

self.pickerView = [[UIPickerView alloc]init];
self.pickerView.dataSource = self;
self.pickerView.delegate = self;
self.pickerView.showsSelectionIndicator = YES;

self.textField.inputView = self.pickerView;

[super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return [self.items count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
return [self.items objectAtIndex:row];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
self.textField.text = [self.items objectAtIndex:row];
}

- (IBAction)pressHide:(id)sender{
[self.textField resignFirstResponder];
}

A 回答 (2件)

あなたがやりたいであろうことを、いちからプログラムしてみました。

あなたの書いたコードを添削したわけではありません。

ViewController.h ------------

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>

@end

ViewController.m ------------

#import "ViewController.h"

@interface ViewController ()

@property (retain, nonatomic) IBOutlet UITextView *myTextView;

@end

@implementation ViewController
{
NSMutableArray *datas;
}

- (void)viewDidLoad
{
[super viewDidLoad];

datas = [[NSMutableArray alloc] initWithObjects: @"ABC", @"DEF", @"GHI", @"JKL", nil];

UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame: CGRectMake(0.0, 0.0, 320.0, 200.0)];
pickerView.showsSelectionIndicator = YES;
pickerView.dataSource = self;
pickerView.delegate = self;

UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame: CGRectMake(0.0, 0.0, 320.0, 42.0)];
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemDone target: self action: @selector(addString:)];
toolBar.items = [NSArray arrayWithObject: buttonItem];

_myTextView.inputView = pickerView;
_myTextView.inputAccessoryView = toolBar;
[toolBar release];
[buttonItem release];
[pickerView release];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void)dealloc
{
[_myTextView release];
[datas release];

[super dealloc];
}

// PickerView Delegates and Datasources
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return datas.count;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [datas objectAtIndex:row];
}

// Barbutton Item Action
- (void)addString: (id)sender
{
UIPickerView *pickerView = (UIPickerView *)(_myTextView.inputView);
_myTextView.text = [_myTextView.text stringByReplacingCharactersInRange: [_myTextView selectedRange] withString: [datas objectAtIndex: [pickerView selectedRowInComponent: 0]]];
[_myTextView resignFirstResponder];
}

@end

あなたのコードといちばん大きな違いは、アクセサリービューを設けて、そこに入力(Done)ボタンを付けたことです。ピッカーを回して、いちどで入力したいアイテムで止められるわけではないので、ピッカーを回して、Doneボタンで入力というインターフェイスにしました。
そのDoneボタンのアクションメソッドの中にピッカービューを隠すメソッド([_myTextView resignFirstResponder];)を書いています。

あなたのコードと比較しながら、目を通してもらえれば、幸いです。
    • good
    • 0
この回答へのお礼

まったく新しいコードを書いていただき、大変参考になりました。
おっしゃる通りアクセサリービューを設けることで解決しました。
ありがとうございました!

お礼日時:2013/09/03 20:27

隠すって。

隠しても意味ないですが。

UITextField で、4択のUIPickerViewをカスタムインプットにして、選択し終わったら、UIPickerViewをくろずするのでしょ。

 そのためには、UIPickerViewだけでは、クローズのボタンがないので、

UITextField.inputAccessoryView に、ボタン付きのUIViewか、UIToolBarをせっていします。

cf http://works.sabitori.com/2011/06/18/add-button- …

ボタンがおされて、pickerViewをクローズするには、

 textfield に、resignFirstResponder を送るか、別のTextFieldに、becomeFirstResponder を送ります。
    • good
    • 0
この回答へのお礼

UITextField.inputAccessaryViewに設定することで解決しました。
私の言葉足らずな文章を補っていただき感謝しています。
参考になるアドバイスをありがとうございました!

お礼日時:2013/09/03 20:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!