防止UIAlertView被解雇

rso*_*son 10 objective-c uialertview

作为一种验证形式,是否有任何方法可以防止在按下"确定"按钮时解除警报视图?

场景:我在alertview中有2个文本字段用于用户名/密码.如果两者都为空并且用户按下"确定",我不希望该警报被解除.

Joo*_*ony 12

iOS 5引入了一个新属性UIAlertView来处理这个问题.

alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
Run Code Online (Sandbox Code Playgroud)

关于UIAlertView的Apple文档.

添加新UIAlertViewDelegate方法以处理启用/禁用按钮.

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
Run Code Online (Sandbox Code Playgroud)

关于UIAlertViewDelegate的Apple文档.


zou*_*oul 9

你这样做是错误的,你应该根据输入启用和禁用提交按钮.首先,您必须访问该按钮.这很简单,只需创建一个没有按钮的警报,创建一个独立的按钮并将其添加到对话框中:

[alert addButtonWithTitle:@"OK"];
UIButton *submitButton = [[alert subviews] lastObject];
[submitButton setEnabled:…];
Run Code Online (Sandbox Code Playgroud)

然后,您必须为这些文本字段设置委托,并在字段更改时启用或禁用该按钮:

- (BOOL) textField: (UITextField*) textField
    shouldChangeCharactersInRange: (NSRange) range
    replacementString: (NSString*) string
{
    int textLength = [textField.text length];
    int replacementLength = [string length];
    BOOL hasCharacters = (replacementLength > 0) || (textLength > 1);
    [self setButtonsAreEnabled:hasCharacters];
}

// Disable the ‘Return’ key on keyboard.
- (BOOL) textFieldShouldReturn: (UITextField*) textField
{
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

当然,你应该将所有这些包装成一个单独的类,这样你就不会搞砸你的调用代码.


Nic*_*ord 0

我不认为您实际上需要传递任何按钮名称。只需取出“确定”按钮字符串并将其保留为“nil”即可。