У меня есть кнопка в содержании UIPopoverController. Эта кнопка выполняет метод, названный myAction.
MyAction имеет форму
- (void) myAction:(id)sender
таким образом myAction получает идентификатор кнопки вызывающей стороны.
Теперь, в этом методе я хотел бы распустить UIPopoverController, но единственной вещью, которую я имею, является идентификатор кнопки вызывающей стороны. Помните, что кнопка в UIPopoverController.
Существует ли способ обнаружить, что идентификатор UIPopoverController, учитывая кнопку ID I уже имеют?
спасибо.
К сожалению, нет. По крайней мере, не в рамках стандартной практики. Возможно, вы сможете подняться по стеку респондентов, чтобы найти его, но это взлом, он глючит и действительно очень грязный.
Если вы хотите закрыть всплывающее окно, нажав кнопку, в соответствующем месте должна быть ссылка на всплывающее окно. Обычно это владелец всплывающего окна ( не контроллер показывает внутри всплывающего окна). Когда кнопка нажата, он может отправить сообщение контроллеру-владельцу, который затем может закрыть всплывающее окно.
У вас может возникнуть соблазн сделать так, чтобы контроллер, отображаемый внутри всплывающего окна, был владельцем своего собственного всплывающего окна, но кодирование таким образом хрупкое, может стать беспорядочным (снова) и может привести к сохранению циклов, так что ни один из них никогда не будет освобожден. .
У меня это работает, и я не думаю, что это взлом. У меня есть стандартное приложение для iPad с разделением экрана. Затем я добавил метод в свой контроллер деталей (владелец всплывающего окна) для обработки увольнения.
В стандартной архитектуре с разделенным представлением оба контроллера корневого и подробного представления доступны через делегата приложения. Поэтому я связал нажатие кнопки внутри всплывающего окна, чтобы вызвать метод, который получает делегата приложения. Оттуда я вызываю метод на контроллере деталей, чтобы закрыть всплывающее окно.
Это код метода на контроллере представления, который отображается внутри всплывающего окна:
- (void) exitView: (id)sender {
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.detailViewController exitDrill];
}
Затем простой метод, который нужно отклонить на контроллере представления подробностей:
- (void) exitDrill {
if(dtController != nil){
[dtController dismissPopoverAnimated: YES];
[dtController release];
}
}
Мне нравится возможность делать это, потому что он дает мне способ показать пользователю, как выйти из всплывающего окна. Это может не понадобиться в будущих версиях приложения; на данный момент, хотя эта парадигма все еще нова для платформы, я предпочитаю разрешить пользователям выводить экран на экран несколькими способами, чтобы минимизировать разочарование.