Написание функции для UIAlertView? - PullRequest
6 голосов
/ 10 июня 2010

Мне надоело писать базовые UIAlertView, то есть:

UIAlertView *alert = [[UIAlertView alloc] initWith...]] //etc

Вместо того, чтобы сделать это, возможно ли поместить все это в "вспомогательную" функцию, где я могу вернуть buttonIndex, или как обычно возвращает предупреждение?

Для простой вспомогательной функции, я думаю, вы могли бы передать параметры для заголовка, сообщения, я не уверен, можете ли вы передать делегатов в параметре, или информацию о пакете.

В псевдокоде это может быть так:

someValueOrObject = Print_Alert(Title="", Message="", Delegate="", Bundle="") // etc

Любая помощь в этом была бы великолепна.

Спасибо

Ответы [ 2 ]

14 голосов
/ 15 июня 2010

В 4.0+ вы можете упростить код предупреждения с помощью блоков, примерно так:

CCAlertView *alert = [[CCAlertView alloc]
    initWithTitle:@"Test Alert"
    message:@"See if the thing works."];
[alert addButtonWithTitle:@"Foo" block:^{ NSLog(@"Foo"); }];
[alert addButtonWithTitle:@"Bar" block:^{ NSLog(@"Bar"); }];
[alert addButtonWithTitle:@"Cancel" block:NULL];
[alert show];

См. Лямбда-оповещение на GitHub .

2 голосов
/ 10 июня 2010

Вот что я написал, когда мне надоело делать то же самое:

-(void)alert:(NSString *)title withBody:(NSString *)message firstButtonNamed:(NSString *)firstButtonName {
  [self alert: title withBody: message firstButtonNamed: firstButtonName withExtraButtons: nil informing: nil];
}

-(void)alert:(NSString *)title withBody:(NSString *)message firstButtonNamed:(NSString *)firstButtonName informing:(id)delegate {
  [self alert: title withBody: message firstButtonNamed: firstButtonName withExtraButtons: nil informing: delegate];
}

-(void)alert:(NSString *)title withBody:(NSString *)message firstButtonNamed:(NSString *)firstButtonName withExtraButtons:(NSArray *)otherButtonTitles informing:(id)delegate {
  UIAlertView *alert = [[UIAlertView alloc]
              initWithTitle: title
              message: message
              delegate: delegate
              cancelButtonTitle: firstButtonName
              otherButtonTitles: nil];
  if (otherButtonTitles != nil) {  
    for (int i = 0; i < [otherButtonTitles count]; i++) {
      [alert addButtonWithTitle: (NSString *)[otherButtonTitles objectAtIndex: i]];
    }
  }
  [alert show];
  [alert release];
}

Вы не можете написать функцию, которая будет отображать предупреждение и затем возвращать значение, например buttonIndex, потому что возврат этого значения происходит только тогда, когда пользователь нажимает кнопку, а ваш делегат что-то делает.

Другими словами, процесс задания вопроса с помощью UIAlertView является асинхронным.

...