我有一个非常简单的UIAlertView
,带有标题,文本字段和确定按钮。我想将文本字段中输入的内容限制为字母数字字符(0-9 a-z A-Z)。这就是我第一次制作警报视图的方式:
UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @"Client id"
message: @"some title"
delegate: self
cancelButtonTitle: @"Ok"
otherButtonTitles: nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];
我首先尝试寻找答案,似乎每个人都建议实施
- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
然后将textField添加到警报中,如下所示:
- (void)someInitialisationMethod {
UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @"Client id"
message: @"some title"
delegate: self
cancelButtonTitle: @"Ok"
otherButtonTitles: nil];
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
[alert addSubview:textField];
[alert show];
}
- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"];
for (int i = 0; i < [string length]; i++) {
unichar c = [string characterAtIndex:i];
if (![myCharSet characterIsMember:c]) {
return NO;
}
}
return YES;
}
我试过这个并将UITextFieldDelegate
和UIAlertViewDelegate
添加到我的视图控制器中。我的问题是文本字段甚至没有添加到我的警报视图。我最后只有一个标题和一个确定按钮的警报。
如何将文本字段正确添加到警报中?我是否正确实施了其余的解决方案?我从this SO question's answer
中删除了shouldChangeCharactersInRange
方法
答案 0 :(得分:3)
你没有说你为什么放弃第一种方式,但这是要走的路。您无法向UIAlertView添加视图。总是不鼓励在警报中添加子视图,但是从iOS7开始就不可能。
所以坚持你的第一种方法。并且不要忘记设置嵌入式textField的委托:
UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @"Client id"
message: @"some title"
delegate: self
cancelButtonTitle: @"Ok"
otherButtonTitles: nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField *textField = [alert textFieldAtIndex:0];
textField.delegate = self;
[alert show];