У меня есть два разных контроллера представлений, один для приборной панели и один для регистрации. Я не хочу, чтобы пользователь мог взаимодействовать с чем-либо на панели управления, пока пользователь не войдет в систему через alertview. Поэтому каждый раз, когда пользователь переходит к панели управления или нажимает на отмену, и они не вошли в систему, я хочу, чтобы всплывающее окно входа в систему появилось.viewWillAppear UIAlertView не отображается
Это прекрасно работает во всех случаях, в том числе, когда пользователь нажимает кнопку «Назад» на панели навигации в окне регистрации, но не работает, когда пользователь нажимает «ОК» на предупреждении на странице регистрации.
вид приборной панели содержит этот код:
@property(strong) UIAlertView * alert;
//...
-(void)viewWillAppear:(BOOL)animated
{
user_email = [[NSUserDefaults standardUserDefaults] stringForKey:@"email"];
if (user_email==nil){
[self auto_login];
} else //...
}
-(void)auto_login
{
alert = [[UIAlertView alloc] initWithTitle:@"Login" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Login",@"Forgot Password",@"Register",nil];
alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
[alert show];
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch (buttonIndex) {
case 0:
{
self.debug.text = @"Cancel";
[self auto_login];
break;
}
//...
default:
{
self.debug.text = @"Register";
[self nav_register];
break;
}
}
}
-(void)nav_register
{
RegisterProfileController *rvc = [[RegisterProfileController alloc] init];
[self.navigationController pushViewController:rvc animated:YES];
}
Вид регистрации контроллер содержит этот код:
-(void)catch_registration
{
NSString *response = [[NSString alloc] initWithData:self.httpdata encoding:NSASCIIStringEncoding];
if([response isEqualToString:@"OK"]){
UIAlertView *successAlert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"..." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
successAlert.alertViewStyle = UIAlertViewStyleDefault;
[successAlert show];
}
else //...
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if ([alertView.title isEqualToString:@"Success"])
[self.navigationController popViewControllerAnimated:TRUE];
}
После отладки, я знаю, что после clickedButtonAtIndex
работает в контроллере представления регистрации, [alert show]
пробегов в контроллере представления панели управления, а clickedButtonAtIndex
НЕ запускается в контроллере представления панели управления, но предупреждение не появляется.
Почему не отображается предупреждение или как его отлаживать?
Попробуйте переместить свой viewWillAppear код для просмотраDidAppear, потому что прямо сейчас вы пытаетесь представить предупреждение, прежде чем появится представление для его представления. (На самом деле перечитывая свой вопрос, я не уверен на 100%, я понимаю эту проблему.) –
Нет, это была проблема. Я не знал, что существует метод viewDidAppear. Сейчас он работает – Cbas
Хорошо, круто. Рад, что вы поняли это. :) –