10

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

场景:我在用户名/密码的警报视图中有 2 个文本字段。如果两者都是空的并且用户按下“确定”,我不希望警报被解除。

4

3 回答 3

12

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

alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;

关于 UIAlertView 的 Apple 文档。

添加新UIAlertViewDelegate方法来处理按钮的启用/禁用。

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView

关于 UIAlertViewDelegate 的 Apple 文档。

于 2012-03-26T15:33:40.580 回答
9

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

[alert addButtonWithTitle:@"OK"];
UIButton *submitButton = [[alert subviews] lastObject];
[submitButton setEnabled:…];

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

- (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;
}

当然,您应该将所有这些包装到一个单独的类中,这样您就不会弄乱您的调用代码。

于 2009-12-23T06:14:37.363 回答
0

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

于 2009-12-23T05:59:32.017 回答