3

テキストフィールドでUIAlertviewを表示したい。また、ユーザーが有効な電子メール ID を入力していない場合、UIAlertview の [OK] ボタンは無効になります。

UIAlertviewを表示し、UIAlertview Okボタンを無効にする方法を知っています..

私の問題は(BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView、ボタンが有効になっている理由ではないということです。

しかし、ユーザーが[OK]ボタンを押すと、

- (void)alertView:(UIAlertView
*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

と呼ばれます。

これが私のコードです、

-(IBAction)forgotpassBtnclicked:(id)sender
{
UIAlertView *alertview=[[UIAlertView alloc]initWithTitle:@"" message:@"" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[alertview setAlertViewStyle:UIAlertViewStylePlainTextInput];
UITextField *textField=[alertview textFieldAtIndex:0];
textField.placeholder=@"enter your email id";
[alertview show];
} 


#pragma  mark Alertview delgate
- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{

UITextField *text1=[alertView textFieldAtIndex:0];
BOOL flag=[self validateEmail:text1.text];
return flag;

}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

}

#pragma mark Email Validation
- (BOOL) validateEmail: (NSString *) email 
{
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
//  return 0;
return [emailTest evaluateWithObject:email];
}

私は何が間違っているのか理解できませんか? ...

前もって感謝します...

4

1 に答える 1

6

UIAlertViewDelegateドキュメントには、alertViewShouldEnableFirstOtherButton:メソッドについて、

アラートの最初のキャンセル以外のボタンを有効にするかどうかを決定するためにデリゲートに送信されます。

@"ok"非キャンセルボタンはnilメソッドが呼び出されないため、キャンセルボタンを使用してアラートを作成しています。代わりに、以下を試してください。

UIAlertView *alertview=[[UIAlertView alloc]initWithTitle:@"" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];

また、ユーザーは、テキストを入力せずにアラートをキャンセルするオプションが必要です。キャンセル ボタンがあると、ユーザー エクスペリエンスが向上します。

于 2013-07-22T09:21:51.063 に答える