Несколько UIAlertView; каждый со своими собственными кнопками и действиями
Я создаю представление в Xcode 4.3 и не знаю, как указать несколько UIAlertView, которые имеют свои собственные кнопки с отдельными действиями. В настоящее время мои оповещения имеют свои собственные кнопки, но те же действия. Ниже приведен мой код.
-(IBAction)altdev {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"titleGoesHere"
message:@"messageGoesHere"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Continue", nil];
[alert show];
}
-(IBAction)donate {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"titleGoesHere"
message:@"messageGoesHere"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Continue", nil];
[alert show];
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite1.com"]];
}
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"examplesite2.com"]];
}
}
Спасибо за любую помощь!
5 ответов:
Есть полезное свойство
tag
дляUIView
(из которогоUIAlertView
подкласс). Вы можете установить разные теги для каждого вида оповещений.Обновление:
#define TAG_DEV 1 #define TAG_DONATE 2 - (IBAction)altdev { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"titleGoesHere" message:@"messageGoesHere" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Continue", nil]; alert.tag = TAG_DEV; [alert show]; } - (IBAction)donate { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"titleGoesHere" message:@"messageGoesHere" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Continue", nil]; alert.tag = TAG_DONATE; [alert show]; } -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (alertView.tag == TAG_DEV) { // handle the altdev ... } else if (alertView.tag == TAG_DONATE){ // handle the donate } }
Проще и новее
UIAlertView *alert = [[UIAlertView alloc] init... alert.tag = 1; UIAlertView *alert = [[UIAlertView alloc] init... alert.tag = 2; - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if(alertView.tag == 1) { // first alert... } else { // sec alert... } }
Все готово!
Если вам трудно использовать методы делегирования для различной идентификации представления предупреждений, то вы также можете использовать этот класс Category для использования блока завершения для каждого представления предупреждений.
Например.
UIAlertView* alert1 = [[UIAlertView alloc] initWithTitle:@"AlertView+Block 1" message:@"WithBlocks" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; [alert1 showWithFinishBlock:^(UIAlertView *alertView, NSInteger buttonIndex){ //--AlertView1 Stuff here }]; UIAlertView* alert2 = [[UIAlertView alloc] initWithTitle:@"AlertView+Block 2" message:@"WithBlocks" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; [alert2 showWithFinishBlock:^(UIAlertView *alertView, NSInteger buttonIndex){ //--AlertView2 Stuff here }];
Я надеюсь, что это самый простой способ, по сравнению с методом tag + delegate..
Он прав, но вам нужно добавить следующее:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (alertView.tag == TAG_DEV && buttonIndex == 1) { // handle the altdev ... } else if (alertView.tag == TAG_DONATE && buttonIndex == 1){ // handle the donate } }
, Если buttonIndex==1, то используется первый прочее. 0 будет для отмены. Но просто ничего не делайте для 0
Или вы можете сделать это (проверьте название заголовка), это просто еще один вариант... Хотя ум тождественно назван предупреждениями!
-(IBAction)altdev { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"titleOneGoesHere" message:@"messageGoesHere" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Continue", nil]; [alert show]; } -(IBAction)donate { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"titleTwoGoesHere" message:@"messageGoesHere" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Continue", nil]; [alert show]; } -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 1) { if([[alertView title] isEqualToString:@"titleOneGoesHere"]) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite1.com"]]; } else { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"examplesite2.com"]]; } }