2013-04-21 4 views
0

Im настраивает IBAction для изменения представлений после выбора строки таблицы & нажата кнопка done.iOS: установите свойство перед изменением вида

Однако, когда я запускаю presentViewController: анимированный, я теряю свой навигационный контроллер.

Итак у меня нет никакого способа, чтобы пойти куда-нибудь, а потом, если я вместо этого «» performSegueWithIdentifier мои свойства не спасают .. Так что значения не передаются ... Например:

ViewController *addViewController = (ViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"V_SignIn"]; 
addViewController.LoadAction = @"NoSession"; 
[addViewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
[self presentViewController:addViewController animated:YES completion:NULL]; 

^^, что код работает, но снимает мой навигации панель инструментов ...

ViewController *addViewController = [[ViewController alloc] init]; 
addViewController.LoadAction = @"TEST"; 
[self performSegueWithIdentifier:@"segue" sender:self]; 

^^ это выполняет непосредственно перейти отлично, но переменная «LoadAction» равна (NULL), когда я NSLog его в новом виде.

В принципе, как я могу настроить @property, не нуждаясь в том, чтобы следить за изменением вида с помощью addViewController var? Благодарю.

ответ

3

В своем первом сценарии, вместо -presentViewController:animated:completion:, вам нужно использовать -pushViewController:animated: на навигационном контроллере, чтобы избежать скрывая его (и наоборот, вы будете использовать -popViewController:animated:, называемый также на навигационном контроллере, чтобы отклонить его, а не -dismissViewControllerAnimated:completion:):

ViewController *addViewController = (ViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"V_SignIn"]; 
addViewController.LoadAction = @"NoSession"; 
[self.navigationController pushViewController:addViewController animated:YES]; 

Как Wain отмечает, в вашем втором сценарии, вам нужно будет сделать вашу конфигурацию addViewController в -prepareForSegue:sender: так:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"segue"]) { 
     ViewController *addViewController = (ViewController*)segue.destinationViewController; 
     // perform setup on addViewController 
     addViewController.LoadAction = @"TEST"; 
     // ... 
    } else if ([segue.identifier isEqualToString:@"someOtherSegue"]) { 
     // ... 
    } 
} 
+0

Ты, сэр, мой спаситель! –

2

Из второго раздела кода просто используйте [self performSegueWithIdentifier:@"segue" sender:self]; для создания и отображения нового вида. Также используйте - prepareForSegue:sender: (в контроллере представления, который запускает вышеуказанный код), чтобы выполнить конфигурацию нового контроллера представления.

+0

Спасибо за у наша помощь! –

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