Я устаю писать основной UIAlertView, т.е.:
UIAlertView *alert = [[UIAlertView alloc] initWith...]] //etc
Вместо того, чтобы делать это, действительно ли возможно поместить все это в функцию "помощника", куда я могу возвратить buttonIndex, или независимо от того, что предупреждение обычно возвращается?
Поскольку простой помощник функционирует, я предполагаю, что Вы могли подать параметры для заголовка, сообщения, я не уверен, можно ли передать делегатов в параметре, хотя, или связывают информацию.
В псевдокоде это могло быть похожим на это:
someValueOrObject = Print_Alert(Title="", Message="", Delegate="", Bundle="") // etc
Любая справка на этом была бы большой.
Спасибо
Вот что я написал, когда мне надоело делать то же самое:
-(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
является асинхронным.
В 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];
См. Lambda Alert на GitHub .