
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];
}
No.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];)を書いています。
あなたのコードと比較しながら、目を通してもらえれば、幸いです。
まったく新しいコードを書いていただき、大変参考になりました。
おっしゃる通りアクセサリービューを設けることで解決しました。
ありがとうございました!
No.1
- 回答日時:
隠すって。
隠しても意味ないですが。UITextField で、4択のUIPickerViewをカスタムインプットにして、選択し終わったら、UIPickerViewをくろずするのでしょ。
そのためには、UIPickerViewだけでは、クローズのボタンがないので、
UITextField.inputAccessoryView に、ボタン付きのUIViewか、UIToolBarをせっていします。
cf http://works.sabitori.com/2011/06/18/add-button- …
ボタンがおされて、pickerViewをクローズするには、
textfield に、resignFirstResponder を送るか、別のTextFieldに、becomeFirstResponder を送ります。
UITextField.inputAccessaryViewに設定することで解決しました。
私の言葉足らずな文章を補っていただき感謝しています。
参考になるアドバイスをありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) pythonをjupiter notebookからmecabで頻出の高い単語の抽出について(Runt 1 2022/12/17 18:08
- Ruby パイソンのクラスについて 3 2023/06/20 07:30
- Ruby 教えてください 2 2023/01/04 17:50
- その他(プログラミング・Web制作) TwitterAPIを使用せずに自動ツイートする方法を知りたい。考え方としてはブラウザを擬似操作して 2 2023/02/02 17:16
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
- 物理学 素粒子物理学の自己相互作用(self-interactions)というのは何ですか?単なる相互作用な 1 2023/08/14 22:12
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- 確定申告 フリーランスの源泉徴収について 1 2022/09/17 15:33
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++言語で、どうこのコード続け...
-
constの意味
-
Visual Basic 2005 についての...
-
質問が多いです・・・・
-
C# Controls.Addで動的に配置し...
-
kinectをRGBカメラとして使うプ...
-
自作DirectShow Filterのinter...
-
RENDERFILEについての質問です
-
ArduinoでMouse関数を使用して...
-
4桁7セグでダイナミック点灯
-
【VC++6.0】イベントハンドラ関...
-
C言語の用語について
-
Arduinoでコンパイルエラーにつ...
-
C++にてtemplateで受け取った任...
-
関数ポインタについて
-
構造体の各メンバにfor文からア...
-
「Aに対するBの割合」と「Aに対...
-
C言語で%を使わない余りの出し方
-
基本的ですが・・・
-
複数のアドレスを関数から取得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【gcc・cygwin】multiple defin...
-
多重定義が起きている?--lnk20...
-
const_castのつかいどころを教...
-
C++にてtemplateで受け取った任...
-
既定のコンストラクタがありま...
-
戻り値を返す関数の前に(void)...
-
静的でないメンバ関数の呼び出...
-
int main()、void main()、void...
-
C# KeyDownイベントでショート...
-
C# Controls.Addで動的に配置し...
-
(void)0 はどんな意味ですか
-
gcc: incompatible pointer type
-
_beginthreadにて発生するコン...
-
C#でラジオボタンを設定に記録...
-
C#でテンキーの操作は可能でし...
-
C++別のオブジェクトからメンバ...
-
CTabCtrl:TABインデックス単位...
-
見た目は同じソースなのにエラ...
-
pictureboxの画像を削除するには?
-
【VC++6.0】イベントハンドラ関...
おすすめ情報