2013-02-21 5 views
2

Так что я создаю приложение на основе рецепта ipad с помощью раскадровки. Просто чтобы дать вам представление о структуре моей программы здесь является поток Просмотр контроллеров:Dismiss ViewController, который представлен через Popup

ViewController --Modally -> PreviewViewController --Modally -> RecipeViewController --Popup -> IngredientsViewController

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

Я использую следующий код, чтобы представить IngredientsViewController программно (изнутри RecipeViewController):

[self performSegueWithIdentifier:@"ingr" sender:nil]; 

, который работает прекрасно, чтобы отобразить всплывающее окно, но я не могу отпустить его. Я пытался получить доступ к нему через иерархию диспетчеров вида, но, похоже, не могу найти его, я бы предположил, что он будет на вершине стека, но, видимо, нет? Я пытался что-то вроде:

[self.presentedViewController dismissViewControllerAnimated:YES completion:nil]; 

Опять это вызывается из RecipeViewController. Но это просто отклоняет RecipeViewController, а не IngredientsViewController, который отображается всплывающим окном.

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

Любая помощь была бы принята с благодарностью. Благодаря!

+0

Есть ли у вас какие-либо кнопки в 'IngredientsViewController' уволить? –

+0

Нет, я хочу отклонить его изнутри RecipeViewController, я использую материал голосового управления, чтобы его отклонить (но это не проблема его только фактического метода, чтобы отклонить его. –

ответ

1
UIPopoverController *popOver = (UIPopoverController *)self.presentedViewController; 
[popOver dismissPopoverAnimated:YES]; 

Это должно сделать трюк, если ваш контроллер представления назначения является UIPopoverController

+0

Мой пункт назначения ViewController не является UIPopoverController, его обычный viewController, но спасибо, что я мог бы подумать о том, чтобы сделать его UIPopoverController. –

+0

Я решил сделать это UIPopoverController в конце, а затем просто создать экземпляр ViewController в popover. Поэтому было просто представить его и отбросить его из одного и того же ViewController. –

+0

Great.Glad это сработало. – Rakesh

0

Вы пробовали presentViewController:animated:completion: вместо performSegueWithIdentifier:?

+0

Я просто пробовал этот метод, используя следующий код: ' UIStoryboard * раскадровка = [UIStoryboard storyboardWithName: @ "MainStoryboard" пачка: ноль]; UIViewController * VC = [раскадровка instantiateViewControllerWithIdentifier: @ "IngrCtr"]; [само presentViewController: В.- анимированная: ДА заканчивания: ноль]; ' Это сорт работал, но вместо того, чтобы представлять его как popover моего определенного размера, он просто представляет его как полноэкранное покрытие поверх моего предыдущего контроллера представления. –

+0

Я понял, почему я использовал performSegueWithIdentifier, потому что я передаю его infor так что я должен придерживаться его представления в этом методе или найти другой способ передачи его информации. –

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