当用户打开我的应用程序时,我想检查存储在默认值中的值,如果它不存在则提示用户输入值。存储/读取值似乎正在起作用。
-(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];
}
}
我遇到的问题是,当我第一次清理安装我的应用程序并加载时,警报会按预期显示,但没有显示键盘,因此用户实际上无法输入任何内容。
单击主页按钮,然后将应用程序重新置于前台,屏幕上显示相同的警报,但这次键盘实际显示。
我该怎么做才能确保第一次显示键盘?
答案 0 :(得分:3)
这是一种奇怪的行为,为什么不尝试在下一个runloop中显示警报
[self.emailPromptAlert performSelector:@selector(show) withObject:nil afterDelay:0];
答案 1 :(得分:1)
我遇到了同样的问题。在我的情况下,键盘在我显示警报时已经可见。我通过在显示警告之前解除键盘来解决它:
[myTextField resignFirstResponder];
[myAlert show];
答案 2 :(得分:0)
我不完全确定,但也许这可行吗?
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];
这并没有真正解决为什么它首先没有显示的问题的根源,但它可能是一个解决方案。