Использование одного делегата для управления двумя UIActionSheets - PullRequest
7 голосов
/ 24 ноября 2008

У меня есть два UIActionSheets, и я думаю, что я буду управлять ими одним делегатом (UIViewController, который их создает). Делегат перехватит вызов actionSheet и попытается выяснить, кто из них вызвал событие.

Я попытался разграничить заголовок modalView, но он кажется недействительным ...

Должно ли это работать?

Если нет, есть ли какой-нибудь другой способ определить, какой UIActionSheet провел событие?

Или мне нужно создать два разных класса, которые будут отдельными делегатами для каждого UIActionSheet?

Заранее спасибо.

Ответы [ 3 ]

44 голосов
/ 24 ноября 2008

Я думаю, вам нужно свойство tag UIActionSheet .

Что-то вроде:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle ... ];
actionSheet.tag = 10;
[actionSheet showInView:self.view];

Тогда в вашем делегате:

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
  switch (actionSheet.tag) {
    case 10:
      ...
  }
}

tag является свойством UIView и может быть установлено в Интерфейсном Разработчике для компонентов, которые также появляются там. Довольно удобно, хотя я сам никогда не использовал это в этом контексте.

9 голосов
/ 24 ноября 2008

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

Использование свойства тега представления работало бы, но было бы легче сохранить ссылку. Свойство tag призвано помочь вам найти представление, если вы просматриваете иерархию вложенных представлений и не имеете ссылки на нужный вам объект.

6 голосов
/ 09 июня 2009

Вы должны использовать указатель actionSheet, переданный методу делегата, как сказал Марк. Например:

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if(actionSheet == myDoSomethingActionSheet) {
        if(buttonIndex == 0) {
            [self doThingA];
            return;
        }
        if(buttonIndex == 1) {
            [self doThingB];
            return;
        }
    }
    if(actionSheet == myOtherActionSheet) {
        if(buttonIndex == 3) {
            [self doImportantThing];
            return;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...