iPad - увольнение UIPopoverController

У меня есть кнопка в содержании UIPopoverController. Эта кнопка выполняет метод, названный myAction.

MyAction имеет форму

- (void) myAction:(id)sender 

таким образом myAction получает идентификатор кнопки вызывающей стороны.

Теперь, в этом методе я хотел бы распустить UIPopoverController, но единственной вещью, которую я имею, является идентификатор кнопки вызывающей стороны. Помните, что кнопка в UIPopoverController.

Существует ли способ обнаружить, что идентификатор UIPopoverController, учитывая кнопку ID I уже имеют?

спасибо.

8
задан SpaceDog 13 April 2010 в 14:25
поделиться

2 ответа

К сожалению, нет. По крайней мере, не в рамках стандартной практики. Возможно, вы сможете подняться по стеку респондентов, чтобы найти его, но это взлом, он глючит и действительно очень грязный.

Если вы хотите закрыть всплывающее окно, нажав кнопку, в соответствующем месте должна быть ссылка на всплывающее окно. Обычно это владелец всплывающего окна ( не контроллер показывает внутри всплывающего окна). Когда кнопка нажата, он может отправить сообщение контроллеру-владельцу, который затем может закрыть всплывающее окно.

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

19
ответ дан 5 December 2019 в 05:55
поделиться

У меня это работает, и я не думаю, что это взлом. У меня есть стандартное приложение для iPad с разделением экрана. Затем я добавил метод в свой контроллер деталей (владелец всплывающего окна) для обработки увольнения.

В стандартной архитектуре с разделенным представлением оба контроллера корневого и подробного представления доступны через делегата приложения. Поэтому я связал нажатие кнопки внутри всплывающего окна, чтобы вызвать метод, который получает делегата приложения. Оттуда я вызываю метод на контроллере деталей, чтобы закрыть всплывающее окно.

Это код метода на контроллере представления, который отображается внутри всплывающего окна:

- (void) exitView: (id)sender {
    MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

    [appDelegate.detailViewController exitDrill];
}

Затем простой метод, который нужно отклонить на контроллере представления подробностей:

- (void) exitDrill {
    if(dtController != nil){
      [dtController dismissPopoverAnimated: YES];
      [dtController release];
    }
}

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

4
ответ дан 5 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: