2014-10-02 3 views
0

По какой-то причине этот код не выполняется последовательно. Xcode, по-видимому, оценивает оператор if-else, а затем отображает UIAlertView, который находится в инструкции if-else перед отображением UIAlertView, который находится перед инструкциями if-else.Код не выполняется последовательно

Ниже мой код для справки:

- (IBAction)btnLogin:(id)sender; { 
    //self.tbxUsername.text = [NSString stringWithFormat:@"vmcv"]; 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Email" 
                message: [NSString stringWithFormat: @"%@", acc.Email] 
                delegate:nil 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:nil]; 
    [alert show]; 


    if([self.tbxUsername.text isEqualToString:acc.Email ]) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Authentication" 
                 message: @"Success" 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
    } 
    else 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Authentication" 
                 message: @"Fail" 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
    } 
} 

ответ

0

Вы не должны показывать несколько UIAlertView последовательно так. Вам нужно подождать, пока предыдущий не будет уволен, а затем представит новый в обратном вызове делегата.

Вы хотите, чтобы определить, какой UIAlertView вызывает метод делегата, поэтому настройте некоторые свойства для хранения ваших UIAlertView.

@property (nonatomic, strong) UIAlertView *emailAlertView, *successAlertView, *failureAlertView; 

Когда ваша кнопка нажата, вы запускаете только первый UIAlertView, запрашивающий их электронную почту. Убедитесь, что вы обновили свой код, чтобы установить делегат самостоятельно, и что ваш контроллер представления реализует протокол UIAlertViewDelegate.

- (IBAction)btnLogin:(id)sender; { 
    self.tbxUsername.text = [NSString stringWithFormat:@"vmcv"]; 

    self.emailAlertView = [[UIAlertView alloc] initWithTitle:@"Email" 
                message: [NSString stringWithFormat: @"%@", acc.Email] 
                delegate:self 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:nil]; 
    [self.emailAlertView show]; 
} 

Теперь реализовать метод делегата, чтобы показать следующий UIAlertView только после того, как первые один был уволен.

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    if(alertView == self.emailAlertView) { 
     if([self.tbxUsername.text isEqualToString:acc.Email]) 
     { 
      self.successAlertView = [[UIAlertView alloc] initWithTitle:@"Authentication" 
                  message: @"Success" 
                  delegate:nil 
                cancelButtonTitle:@"OK" 
                otherButtonTitles:nil]; 
      [self.successAlertView show]; 
     } 
     else 
     { 
      self.failureAlertView = [[UIAlertView alloc] initWithTitle:@"Authentication" 
                  message: @"Fail" 
                  delegate:nil 
                cancelButtonTitle:@"OK" 
                otherButtonTitles:nil]; 
      [self.failureAlertView show]; 
     } 
    } 
    else if(alertView == self.successAlertView) { 
     //handle dismiss event of success alert view 
    } 
    else if(alertView == self.failureAlertView) { 
     //handle dismiss event of failure alert view 
    } 
} 

Это должно обеспечить «последовательный» эффект, который вы ищете.

+0

Спасибо за просветление. object-c действительно кажется v отличным от языков, которые я делал раньше, таких как C# и java. – fuzionist

+0

Образец делегирования, показанный выше, является очень распространенным шаблоном проектирования, используемым в Objective-C и во всем SDK для iOS. Хорошие разработчики iOS знакомятся с ним и охватывают его в своем собственном коде. Чтобы получить больше опыта в деле делегирования, попробуйте реализовать и настроить UITableView. UITableView имеет как делегат, так и протокол данных, которые должны помочь вам узнать больше об этом шаблоне проектирования. – dfmuir

0

Drawing не происходит в режиме реального времени. Вы выдаете команды рисования, и экран фактически нарисован в цикле событий после того, как вы выпадете из своего метода. Вы не можете перейти и увидеть, как ваш экран обновляется. Поэтому вам нужно показать первое предупреждение, выйти из вашего метода, чем вызвать второе предупреждение, вызванное методом выхода (кнопка нажата) в первом предупреждении.

+0

Привет, извините, но я не знаком с объективом-c. Мне было интересно, можете ли вы проиллюстрировать, что вы имели в виду с помощью некоторых скелетных кодов? Спасибо большое! – fuzionist

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