2015-01-01 3 views
0

У меня есть два разных контроллера представлений, один для приборной панели и один для регистрации. Я не хочу, чтобы пользователь мог взаимодействовать с чем-либо на панели управления, пока пользователь не войдет в систему через 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 НЕ запускается в контроллере представления панели управления, но предупреждение не появляется.

Почему не отображается предупреждение или как его отлаживать?

+2

Попробуйте переместить свой viewWillAppear код для просмотраDidAppear, потому что прямо сейчас вы пытаетесь представить предупреждение, прежде чем появится представление для его представления. (На самом деле перечитывая свой вопрос, я не уверен на 100%, я понимаю эту проблему.) –

+0

Нет, это была проблема. Я не знал, что существует метод viewDidAppear. Сейчас он работает – Cbas

+0

Хорошо, круто. Рад, что вы поняли это. :) –

ответ

0

Если clickedButtonAtIndex «НЕ запускается», как вы сказали, то delegate может быть настроен неправильно. Кроме того, вероятно, вы должны переместить код от viewWillAppear: до viewDidAppear:, потому что в этой точке зрения нет представления иерархии. Ваше решение может быть комбинацией этих двух проблем.

Смежные вопросы