2013-12-03 3 views
1

Я хотел знать, можно ли установить делегат Alert View как какой-то другой ViewController. Причина в том, что я намерен реализовать определенное действие на основе кнопки просмотра предупреждения, нажатой пользователем.Как установить другой ViewController в качестве делегата из AlertView

Вот что я пытаюсь сделать: -

1] Заявленный <UIAlertViewDelegate> в controller.h файле представления, где мне нужно реализовать метод делегата alertView.

2] Вот как мой alertView объявлен в AppDelegate.

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
     if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive) 
    { 
     alertView = [[UIAlertView alloc]initWithTitle:@"New Message" message:@"Click switch to check out" delegate:rosterListController cancelButtonTitle:@"OK" otherButtonTitles:@"Switch ", nil]; 
     [alertView show]; 
    } 
} 

3] Теперь я хочу реализовать alertView метод делегата clickedButtonAtIndex в другой View Controller, но не дозвонились.

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == 0) 
    { 
     NSLog(@"Cancel button pressed"); 
    } 
} 
+0

Существует ли rosterListController или он ноль? –

+0

ohk .... список реестров контроллер nil .... – icodes

+0

что делать сейчас .... – icodes

ответ

0

rosterListController установить делегат на глобальном месте и, чем установить alertview делегат на его rosterListController делегата. Функция просмотра Alertview будет вызываться в представлении, где установлен его делегат.

GlobalSpace 

id rosterDelegate; 
+(void)setRosterDelegate:(id)_delegate{ 
_rosterDelegate=_delegat; 
} 
+(id)getRosterDelegate{ 
return _rosterDelegate; 
} 

Теперь в вашем rosterListController классе установить делегат как этот

[GlobalSpace setRosterDelegate:self]; 

и ваш alertView как этот

alertView = [[UIAlertView alloc]initWithTitle:@"New Message" message:@"Click switch to check out" delegate:[GlobalSpace getRosterDelegate] cancelButtonTitle:@"OK" otherButtonTitles:@"Switch ", nil]; 
1

Вы должны сделать AppDelegate AlertView делегата, так как это приложение делегата который представляет Alter View. Нет смысла использовать случайный несвязанный контроллер вида. Если у вас есть сильное желание сделать это в любом случае, подумайте, что что-то не так с вашей логикой проектирования и приложения.

В качестве альтернативы вы можете создать новый класс, который станет делегатом. Единственная цель этого класса - обрабатывать события просмотра предупреждений и, возможно, передавать данные назад и усилие между презентатором и представлением предупреждения. Вы можете определить протокол, который определяет минимальный API, который должен выполнить ведущий, чтобы связаться с обработчиком делегата.

Для каждого презентатора, который представляет это предупреждение, имеет ivar для объекта делегата. Когда вы представляете Alert View, независимо от того, какой ведущий, создайте и инициализируйте объект делегата и установите его как делегат. Когда предупреждение будет отклонено, отпустите объект делегата.

Обратите внимание, что для делегирования объекта делегирования может потребоваться ссылка на ведущего.

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