当用户打开我的应用程序时,我想检查默认值中存储的值,如果不存在,则提示用户输入值。值的存储/读取似乎正在工作。
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"Checking if there is an email address set");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString * emailAddress = [defaults objectForKey:@"emailAddress"];
if (IsEmpty(emailAddress))
{
NSLog(@"email address is blank, prompting user to enter one..");
self.emailPromptAlert = [[UIAlertView alloc] initWithTitle:@"Alert"
message:@"Enter Email address:"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
[self.emailPromptAlert setAlertViewStyle:UIAlertViewStylePlainTextInput];
[self.emailPromptAlert setTag:1];
[self.emailPromptAlert show];
}
}
我遇到的问题是,当我第一次干净安装应用程序并加载时,警报会按预期显示,但没有显示键盘,因此用户实际上无法键入任何内容。
点击主页按钮,然后再次将应用程序带回前台,屏幕上也会出现同样的警报,但这次键盘实际上显示了。
我该怎么做才能确保第一次显示键盘?
这是一个奇怪的行为,为什么不在下一个运行循环中显示警报
[self.emailPromptAlert performSelector:@selector(show) withObject:nil afterDelay:0];
我也遇到了同样的问题。在我的情况下,当我显示警报时,键盘已经可见。我在显示警报之前关闭了键盘,解决了这个问题:
[myTextField resignFirstResponder];
[myAlert show];
我不完全确定,但也许这可行?
self.emailPromptAlert = [[UIAlertView alloc] initWithTitle:@"Alert"
message:@"Enter Email address:"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
[self.emailPromptAlert setAlertViewStyle:UIAlertViewStylePlainTextInput];
[self.emailPromptAlert setTag:1];
[self.emailPromptAlert show];
//try this?
UITextField *textField = [self.emailPromptAlert textFieldAtIndex:0];
[textField becomeFirstResponder];
这并不能真正解决为什么它一开始就没有出现的问题,但它可能是一个解决方案。