iOS: ContainerView - Внешний вызов prepareForSegue в childController
В следующей настройке Button 1
звонки First VC
а также Button 2
звонки Second VC
В настоящее время я использую следующий код для вызова SecondVC
нажав Button 2
,
MainVC.m
@implementation MainVC()
....
UINavigationController *navController = [self.childViewControllers objectAtIndex:0];
SecondVC *secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"second"];
[navController pushViewController:secondVC animated:YES];
Код выше отображает SecondVC
просто хорошо. Однако в First VC
Есть операторы, которые должны быть выполнены до того, как "Second VC" будет представлен, которые пропускаются!
Я выполняю эти заявления в First VC
внутри -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
, Когда Next
Кнопка нажата в First VC
, все операторы выполняются, потому что это вызывает prepareForSegue
перед представлением SecondVC
, Этот шаг пропускается при использовании кода выше.
Дополнительная информация:
А) Хотя Navigation Controller
, Main VC
в моем приложении не отображается панель навигации в моем приложении. Я считаю, что это было бы против HIG для отображения двух панелей навигации на iPhone. Я показываю это здесь, чтобы идентифицировать Main VC.
Б) В FirstVC есть текстовые поля, которые пользователь заполняет. Если я просто скопирую код, будет ли он читать и сохранять данные из textFields.text?
Вопрос: как мне позвонить prepareForSegue
от First VC
когда Button 2
подключен в MainVC
? или есть другой подход к этому?
1 ответ
Вы можете попробовать что-то вроде следующего:
UINavigationController *navController = [[self childViewControllers] objectAtIndex:0];
UIViewController *vc = [navController topViewController]
if ([vc isKindOfClass:[FirstVC class]]) {
FirstVC *firstVC = (FirstVC *)vc;
SecondVC *secondVC = [[self storyboard] instantiateViewControllerWithIdentifier:@"second"];
// Copy and read data from [[firstVC textField] text] to secondVC.
[navController pushViewController:secondVC animated:YES];
}