今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

iOS開発知識点2——ログイン画面

iOS 開発知識点 2—— ログイン画面#

ボタンのリアルタイムレスポンス:ログイン時には、ユーザーが入力しているときにボタンが反応する必要があります(クリック可能)。入力ボックスのいずれかが空であれば、ボタンは反応しません。以前は textfield のデリゲートメソッドを使って直接判断していると思っていましたが、それは良くないことに気付きました。別の方法があります。

// まずtextfieldにaddTargetメソッドを追加します。最後のcontrolEventsはEditingChangedに注意してください。
[self.accountTextField addTarget:self action:@selector(handleTextDidChange:) forControlEvents:UIControlEventEditingChanged];
[self.passwordTextField addTarget:self action:@selector(handleTextDidChange:) forControlEvents:UIControlEventEditingChanged];

// 次にこのメソッドを実装します。
- (void)handleTextDidChange:(id)sender
{
    NSString * accountStr = self.accountTextField.text;
    NSString * passwordStr = self.passwordTextField.text;
    if (accountStr.length > 0 && passwordStr.length > 0) {
        // ログイン可能
        self.loginButton.userInteractionEnabled = YES;
        [self.loginButton setTitleColor:btnEnabledColor forState:UIControlStateNormal];
    } else {
        // ログイン不可
        self.loginButton.userInteractionEnabled = NO;
        [self.loginButton setTitleColor:btnUnabledColor forState:UIControlStateNormal];
    }
}

入力ボックスの長さ制限:電話番号や認証コードを入力する際、通常は長さ制限があります。私たちが求めているのは、11 桁の電話番号または 6 桁の認証コードですので、最大でもこれだけしか入力できず、超えた場合は表示されないようにして、ユーザーが理解しやすくします。

// これはtextFieldのデリゲートメソッドを使って実現しています。
_smsPhoneTextField.delegate = self;
_smsCirtifyTextField.delegate = self;

#pragma mark - 入力長さ制限
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([string isEqual:@"\n"]) {
        return YES;
    }
    NSString * aString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    if (textField == _smsCirtifyTextField) {
        if (aString.length > 6) {
            aString = [aString substringToIndex:6];
            return NO;
        }
    }
    if (textField == _smsPhoneTextField) {
        if (aString.length > 11) {
            aString = [aString substringToIndex:11];
            return NO;
        }
    }
    return YES;
}

電話番号の正規表現:私はよく使う正規表現のブログをブックマークしました。とても良いもので、自分のニーズに合わせて少し変更すれば使用できます。
よく使う正規表現

#pragma mark - 電話番号検証
- (BOOL)validateMobile:(NSString *)mobile
{
    // 電話番号は13、15、18、17で始まり、8つの \d 数字文字
    NSString * phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9])|(17[0,0-9]))\\d{8}$";
    NSPredicate * phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
    return [phoneTest evaluateWithObject:mobile];
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。