sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

UITextFieldで入力状態(キーボード)を制御する

UITextFieldでの入力状態をon/offするには以下のメッセージを使う。

キーボードを出す

becomeFirstResponder

キーボードを消す

resignFirstResponder

リターンキーでの制御

リターンキーが押された時に、次のTextFieldを入力状態にするなら、UITextFiledDelegateの - (BOOL)textFieldShouldReturn:(UITextField *)textField を使って、対象のTextFieldにbecomeFirstResponderを送る。

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    switch (textField.tag) {
        case 1:
            [[self.view viewWithTag:2] becomeFirstResponder];
            return NO;
        case 2:
            [textField resignFirstResponder];
            return NO;
        default:
            return YES;
    }
}

例の場合、tagの値が1のtextfieldでリターンを押すと次のtextfieldが入力可能となり、そこでさらにリターンを押すと入力が終了してキーボードが閉じる。

ボタン制御

両方のTextFieldに1文字以上の文字が入力されているときにボタンがonになるような制御。 メールのアカウント設定はこの動作。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if(textField.tag == 1){
        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        _useridinput = (newLength > 0);
    }else if(textField.tag == 2){
        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        _passwdinput = (newLength > 0);
    }
    self.btnLogin.enabled = (_useridinput && _passwdinput);
    return YES;
}