реализация простого всплывающего окна в новом xcode4.2 и отслеживание события dismissPopover

#xcode4 #ios5 #uipopovercontroller #uipopover

#xcode4 #ios5 #uipopovercontroller #uipopover

Вопрос:

Я сдаюсь и нуждаюсь в некоторой помощи.

Я пытаюсь реализовать простое всплывающее окно выбора в xcode4, используя раскадровку

Я создал раскадровку и добавил представление, которое является средством выбора. Я привязал кнопку к представлению, и отображается представление с помощью средства выбора. Появится всплывающее окно выбора, и я могу выбрать нужное мне значение. Когда я отклоняю всплывающее окно, я не получаю никакого события. ранее в вызывающем представлении вызывался метод «popoverControllerDidDismissPopover». Отсюда я мог выполнять любые операции после всплывающего окна и извлекать любые конкретные результаты, которые я рассчитал на основе выбора сборщика. Все это работало ранее.

Что эквивалентно «popoverControllerDidDismissPopover» при использовании раскадровки

Спасибо

Ответ №1:

Пусть ваш контроллер представления, который «владеет» всплывающим окном / переходом, реализует UIPopoverControllerDelegate протокол с помощью popoverControllerDidDismissPopover метода. Кроме того, убедитесь, что вашему переходу присвоен идентификатор в Interface Builder. Затем реализуйте prepareForSegue метод:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender  
{
  if ([segue.identifier isEqualToString:@"MyPopoverSegueIdentifier"]) {
    UIStoryboardPopoverSegue* popSegue = (UIStoryboardPopoverSegue*)segue;
    popSegue.popoverController.delegate = self;
    // also set any properties of the popover view controller itself:
    // popSegue.destinationViewController.someProperty = xyz
  }
}
  

Теперь вы будете получать popoverControllerDidDismissPopover сообщения, как и ожидалось.

Комментарии:

1. Спасибо за ответ. В конце концов я нашел способ, основанный на том, как вы описали выше для настройки. А затем использовал действие делегирования из всплывающего окна при возврате данных и одновременной очистке всплывающего окна. Однако я так и не получил событие popoverControllerDidDismissPopover

Ответ №2:

Я не знаю эквивалента xcode, поскольку я пользователь MonoTouch, но я знаю, что событие DidDismiss не запускается, когда вы программно отклоняете всплывающее окно (см. Документацию Apple). Оно вызывается только тогда, когда всплывающее окно отклоняется пользователем, выбирающим другой элемент.

Чтобы решить эту проблему в MonoTouch, нам пришлось создать подкласс UIPopoverController, добавить наше собственное событие, переопределить метод Dismiss и запустить новое событие в методе переопределения. Таким образом, оно вызывается независимо от того, отклоняется ли всплывающее окно программно или пользователем.

Комментарии:

1. Спасибо. Я пытаюсь использовать только стандартные инструменты, поэтому пока у меня нет никаких программ для отклонения всплывающего окна, все это делается с помощью фона раскадровки, что здорово. Я боюсь, что мне, возможно, придется опуститься и испачкаться, что кажется немного отталкивающим по сравнению с тем, что было приятным простым событием.

2. Я не использовал функциональность раскадровки, но, исходя из вашего наблюдения / объяснения, я предполагаю, что она программно отклоняет всплывающее окно и, таким образом, не запускает событие.