6

При попытке раскадровки для одного из моих проектов я наткнулся на то, для чего у меня нет хорошего решения;Как нажать viewController перед тем, как отклонить контроллер модального просмотра с помощью раскадровки?

У меня есть приложение на основе навигации, которое показывает UITableViewController. TableView заполняется пользовательскими элементами. Нажатие на элементную ячейку вызывает контроллер подробного представления. Пользователь может создать новый элемент, нажав кнопку в таблицеView. Это вызывает модальное представление, которое будет обрабатывать создание.

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

У кого-нибудь есть хороший образец для этого?

Текущая ситуация

TableView --(tap create)--> creation modal view --(finish creating)--> TableView 

Должно быть

TableView --(tap create)--> creation modal view --(finish creating)--> detail view 
+0

Добавил свой ответ ниже. Любые лучшие шаблоны, которые могут сделать это с помощью раскадровки, по-прежнему оцениваются. – SpacyRicochet

ответ

0

Лучший образец, который я мог придумать, это то же самое, как и старый шаблон в коде.

Добавить объект (nonatomic, weak) UINavigationController *sourceNavigationController в модульный контроллер. Когда наступит время распускать контроллер представления модально, добавьте следующий код:

DetailViewController *detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
detailViewController.element = newlyCreatedElement; 
[[self sourceNavigationController] pushViewController:detailViewController animated:NO]; 

И чтобы убедиться, что sourceNavigationController получить набор правильно, добавьте следующий код в prepareForSegue: в TableView:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"newElementSegue"]) { 
     [[segue destinationViewController] setSourceNavigationController:self.navigationController]; 
    } 
} 
1

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

Если вы хотите перейти от просмотра деталей непосредственно к представлению таблицы, вы можете добавить свойство в контроллер представления деталей, скажем @property (nonatomic) BOOL cameFromCreationViewController;. Вы можете установить это свойство в prepareForSegue: в контроллере представления источника. В представлении деталей сделайте свою собственную кнопку «назад», и когда она будет использована, вы можете сделать это:

if(self.cameFromCreationViewController){ 
    [self.presentingViewController dismissViewController]; 
} 
else { 
    [self.navigationController popViewController] 
} 
Смежные вопросы