寺子屋管理者

  • アバター画像

教えて!iPhoneアプリ開発全般

公開寺子屋 1 年と 1 か月前に活動

iPhoneアプリ開発全般についての寺子屋です。

UITextFieldにおいてtabキーを識別したい (3件の投稿)

← 寺子屋講義   寺子屋講義案内
  • アバター画像 melonsan による4 年と 9 か月前の発言:

    初めまして、melonsanと申します。
    今回お聞きしたいことはタイトルの通り、UITextFieldにフォーカスがある状況でtabキーを押した時に、tabキーが押されたことを識別するにはどうしたらいいかと
    という質問です。

    iPadシミュレータでデバックにてUITextFieldが複数ある場合にtabキーを押すと、UITextFieldの位置を見て一番近い?UITextFieldにフォーカスが移動するようです。
    ここを自分が指定したUITextFieldに移動する作りにしたいと思っており、そのためにはtabキーの識別が必要と考え、質問致しました。

    ※UITextViewならば、デリゲートのshouldChangeTextInRangeを使用すればtabを”t”として識別できるようです。

    以上です、よろしくお願い致します。

  • アバター画像 reborn による4 年と 9 か月前の発言:

     NSViewなら、nextKeyViewってのがあって結構簡単に順番を指定できるんですけどねえ。
     
     思いつくのは、こんな感じでのごまかしかな〜。
     Empty Applicationテンプレート使ってPrefix:KMとして用意したプロジェクトのKMAppDelegate.mを次のようにします。文字化けするので<>や&&は全角にしてるので、コピペには注意してください。

    @interface KMAppDelegate()<UITextFieldDelegate> {
        UITextField* curt;
    }
    
    @end
    @implementation KMAppDelegate
    
    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    {
        if (curt == nil) {
            return YES;
        }
        if (curt == textField)
            return YES;
        if ((curt.tag == 1) && (textField.tag == 3)) {
            return YES;
        }
        if ((curt.tag == 2) && (textField.tag == 1)) {
            return YES;
        }
        if ((curt.tag == 3) && (textField.tag == 2)) {
            return YES;
        }
        return NO;
    }
    
    - (void)textFieldDidBeginEditing:(UITextField *)textField
    {
        curt = textField;
    }
    
    - (void)tap:(UITextField *)textField
    {
        curt = textField;
    }
    
    - (void)addTextField:(int)top tag:(int)tag
    {
        UITextField* textfield = [[UITextField alloc] initWithFrame:CGRectMake(20, top, 200, 20)];
        textfield.borderStyle = UITextBorderStyleLine;
        [textfield addTarget:self action:@selector(tap:) forControlEvents:UIControlEventAllTouchEvents];
        textfield.delegate = self;
        textfield.tag = tag;
        [self.window addSubview:textfield];
    }
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
    
        [self addTextField:40 tag:1];
        [self addTextField:80 tag:2];
        [self addTextField:120 tag:3];
    
        return YES;
    }
    
  • アバター画像 melonsan による3 年と 6 か月前の発言:

    rebornさん
    返信が大変遅れてしまい、誠に申し訳ありませんでした。

    結局tabは使用せず、リターンキーを押した時に配列で持っているUITextField集合の次のタグへフォーカスを当てるようにしました。

    ですが出来ればtabで移動してみたいと思っていたので、rebornさんが仰っている方法で試してみたいと思います。
    後日連絡させて頂きます、ありがとうございました。