質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Q&A

解決済

1回答

3038閲覧

[Objective-C]UITextFieldのデリゲートでtextFieldShouldBeginEditingが使えない。

Satochan24

総合スコア113

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

0グッド

0クリップ

投稿2015/06/18 10:31

編集2015/06/18 11:19

テキストフィールドの入力で、キーボードを出す代わりにUIPickerを表示させたいのですが、
UITextFieldDelegateのプロトコルを設定して、textField.delegate = self;としても、
textFieldShouldBeginEditingが認識されず、宣言されていないと怒られてしまいます。
何か、理由ありますでしょうか?
参考にしたサイト
http://andbyyou.com/ios-uipickerview%E3%82%92uiactionsheet%E5%86%85%E3%81%AB%E5%87%BA%E3%81%99%E3%81%8B%E3%81%A4picker%E3%82%92%E8%A4%87%E6%95%B0%E8%A8%AD%E5%AE%9A/

コードを貼ります。もともと、1画面内にピッカーを3つ配置していたのですが、試験的にActionシートでのピッカーを設置している内容です。
[CourseViewController.h]

lang

1 2@interface CourseViewController : UIViewController <UIPickerViewDelegate,UIPickerViewDataSource,UIActionSheetDelegate,UITextFieldDelegate> 3{ 4 // NSArray *bus_course; バスコースはサーバからの応答データを使用するため固定の値は使用しない。 5 NSArray *bus_ride_type; 6 NSArray *bus_measure_time_interval; 7 UIActionSheet *actionsheet; 8} 9@property (weak, nonatomic) IBOutlet UILabel *button_entry_label; 10perty (nonatomic, strong) NSMutableArray *bus_course_mutable; 11@property (nonatomic, strong) NSMutableArray *course_id_mutable; 12 13 14- (IBAction)button_start:(UIButton *)sender; 15- (IBAction)button_back:(UIButton *)sender; 16 17@property (weak, nonatomic) IBOutlet UITextField *textField1; 18@property (weak, nonatomic) IBOutlet UITextField *textField2; 19@property (weak, nonatomic) IBOutlet UITextField *textField3; 20 21@end> 22コード

[CourseViewController.m]

lang

1#import "CourseViewController.h" 2#import "GPSPositionViewController.h" 3 4@interface CourseViewController () 5 6@property (weak, nonatomic) IBOutlet UIPickerView *picker; 7@property (weak, nonatomic) IBOutlet UIPickerView *picker2; 8@property (weak, nonatomic) IBOutlet UIPickerView *picker3; 9 10@end 11 12@implementation CourseViewController 13{ 14 // Action sheet test 15 UIPickerView *picker_1; 16 UIPickerView *picker_2; 17 UIPickerView *picker_3; 18 19 NSString *pic1_str; 20 NSString *pic2_str; 21 NSString *pic3_str; 22 23} 24 25// Action sheet test 26@synthesize textField1; 27@synthesize textField2; 28@synthesize textField3; 29 30- (void)viewDidLoad { 31 [super viewDidLoad]; 32 // Do any additional setup after loading the view. 33 34 35 // パラメータ受け渡し 36 _textView_CsName.text = self.Cs_Name; 37 _textView_UserName.text = self.User_Name; 38 _Mode = self.Mode; 39 40 // 設定運行の処理 41 if ([_Mode isEqual: @"2"]) { 42 _button_entry_label.text = @"設定運行"; 43 //_button_entry_label.textColor.redColor; 44 } 45 46 47 bus_ride_type = [NSArray arrayWithObjects: 48 @"登園", 49 @"降園", nil]; 50 bus_measure_time_interval = [NSArray arrayWithObjects: 51 @"5", 52 @"10,nil]; 53 54 _picker.delegate = self; 55 _picker2.delegate = self; 56 _picker3.delegate = self; 57 _picker.dataSource = self; 58 _picker2.dataSource = self; 59 _picker3.dataSource = self; 60 61 // Action sheet test 62 textField1.delegate = self; 63 textField2.delegate = self; 64 textField3.delegate = self; 65 textField1.tag = 1; 66 textField2.tag = 2; 67 textField3.tag = 3; 68 69 CGRect rect = [[UIScreen mainScreen] bounds]; 70 71 picker_1 = [[UIPickerView alloc] init]; 72 picker_1.frame = CGRectMake(0, rect.size.height, 320, 216); 73 picker_1.showsSelectionIndicator = YES; 74 picker_1.delegate = self; 75 picker_1.dataSource = self; 76 picker_1.tag = 1; 77 [self.view addSubview:picker_1]; 78 79 picker_2 = [[UIPickerView alloc] init]; 80 picker_2.frame = CGRectMake(0, rect.size.height, 320,216); 81 picker_2.showsSelectionIndicator = YES; 82 picker_2.delegate = self; 83 picker_2.dataSource = self; 84 picker_2.tag = 2; 85 [self.view addSubview:picker_2]; 86 87 picker_3 = [[UIPickerView alloc] init]; 88 picker_3.frame = CGRectMake(0, rect.size.height, 320,216); 89 picker_3.showsSelectionIndicator = YES; 90 picker_3.delegate = self; 91 picker_3.dataSource = self; 92 picker_3.tag = 2; 93 [self.view addSubview:picker_3]; 94 95 96// Action sheet test 97- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 98 CGRect rect = [[UIScreen mainScreen] bounds]; 99 if (textField.tag == 1) { 100 NSLog(@"1"); 101 picker2.frame = CGRectMake(0, rect.size.height, 320, 216); 102 [self showPicker1]; //picker1を表示させるメソッドを実行 103 //キーボードは表示させない 104 return NO; 105 } 106 if (textField.tag == 2) { 107 NSLog(@"2"); 108 picker1.frame = CGRectMake(0, rect.size.height, 320, 216); 109 [self showPicker2]; //picker2を表示させるメソッドを実行 110 //キーボードは表示させない 111 return NO; 112 } 113 return NO; 114 } 115 116 117} 118 119@end> 120コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

okenProg

2015/06/18 10:59

IBOutletが正しく貼られてないのかなと コードの方も貼っていただけると、お力になれるかもしれません。
Satochan24

2015/06/18 11:19

ソースを貼ってみました。基本は、参考サイトとほぼ同じ内容です。
Stripe

2015/06/18 11:36

「宣言されていないと怒られてしまいます。」って、どういう意味ですが?何かエラーでも出ましたか?
Satochan24

2015/06/18 11:43

Use of undeclared identifier 'textFieldShouldBginEditing' です。そもそも、途中まで入力すればX−CODEが補完してくれるのに、それがない状況です。
okenProg

2015/06/18 11:46

textFieldShouldBginEditingだと綴り間違えてますね textFieldShouldBeginEditingです
Satochan24

2015/06/18 11:52

いや、そこは、ソースコード見てもらえばわかると思いますが、ソースコード上の綴りは間違いないです。それに途中まで入力すれば補完されるはず・・・
Stripe

2015/06/18 12:04

そもそも、そのエラーが出ること自体がおかしいです。どこかに、「id hoge = textFieldShouldBginEditing;」とか書いてませんか?あと、それはコンパイルエラーなので、プログラム自体実行できてませんよね?
Stripe

2015/06/18 12:07

ちなみに、エラーメッセージの'textFieldShouldBginEditing'は、メソッド名じゃなくて、変数名として認識されています。どこかに書いてませんか?
Satochan24

2015/06/18 12:13

ちょっと探して、明日また報告します。すみません。
Satochan24

2015/06/19 00:56

同じファイル内には見当たらなかったです。 一つ気になったのは、テキストフィールドのデリゲートで textField1.delegate = self; textField2.delegate = self; textField3.delegate = self; が警告されていて、 Assigning to 'id<UITextFieldDelegate>' from incompatible type 'CourseViewController *const__strong' となっています。
guest

回答1

0

ベストアンサー

もしかしてそもそもまともにコンパイルできていない状態ですか?

lang

1 bus_measure_time_interval = [NSArray arrayWithObjects: 2 @"5", 3 @"10,nil];

ここの10の後に"がないですね。

あと、viewDidLoadも閉じられていませんね。

lang

1[self showPicker1]; //picker1を表示させるメソッドを実行 2[self showPicker2]; //picker2を表示させるメソッドを実行

これらのメソッドも勿論実装されていますよね?

デリゲートのセットと、デリゲートメソッドの定義は問題ないはずです。

あとはIBOutletが正しくはられてないぐらいしか思いつきません。

投稿2015/06/18 11:50

okenProg

総合スコア153

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Satochan24

2015/06/18 12:15

すみません。文字数制限があったので少しソースを消した時に文法が壊れたものと思われます。基本は、参考サイトとほぼ同じはずです。
okenProg

2015/06/18 12:17

それは、失礼しました。
Satochan24

2015/06/19 05:17

すみません。原因分かりました。ご指摘のとおり、viewDidLoad が閉じられていませんでした。お手数おかけしました。 ただ、アクションシートにピッカーを表示させることは、まだ成功していないので (アクションシートの空欄の1行だけが表示される状態) もう少し調べて、分からなければ、また別で質問するかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問