作为一种验证形式,是否有任何方法可以防止在按下“确定”按钮时解除警报视图?
场景:我在alertview中有2个用于用户名/密码的文本字段。如果两者都是空的并且用户按下“确定”,我不希望解除警报。
答案 0 :(得分:12)
iOS 5向UIAlertView
引入了一个新属性来处理这个问题。
alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
Apple documentation on UIAlertView.
添加新的UIAlertViewDelegate
方法来处理启用/禁用按钮。
- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
答案 1 :(得分: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;
}
当然你应该把所有这些都包装成一个单独的类,这样你就不会搞砸你的调用代码。
答案 2 :(得分:0)
我不相信你确实需要传递任何按钮名称。只需取出你的OK按钮字符串并将其保留为“nil”。