2013-11-28 4 views
0

Я создал приложение с вкладками в Xcode 5, используя раскадровку с 5 различными вкладками.Как изменить контроллер представления, созданный раскадрой?

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

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

UIStoryboard *mainStoryboard = [self storyboard]; 
ProfileViewController *controller = [mainStoryboard instantiateViewControllerWithIdentifier: @"loginviewcontroller"]; 
[controller setFields:PFLogInFieldsFacebook | PFLogInFieldsDefault]; 
[self presentViewController:controller animated:YES completion:nil]; 

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

Как получить доступ к этому контроллеру представлений, созданному с помощью раскадровки автоматически или это неправильный подход? Если это неправильный подход, как мне достичь этой задачи?

ответ

0

Вы получаете доступ к его через контроллер панели вкладок. Из любого контроллера, встроенного в контроллер панели вкладок вы можете получить ссылку так:

UIViewController *controller = self.tabBarController.viewControllers[4]; 

Чтобы установить поля, вместо того, чтобы пытаться установить их с другого контроллера, просто передать данные о том, что контроллер # 5 должна сделай это сам. Поскольку представление № 5 не будет загружено до тех пор, пока оно не будет просмотрено в первый раз, вы не сможете изменить его представление с другого контроллера. Таким образом, в свойстве ProfileViewController, create и integer, вызывается его fieldValues ​​и передается на него данные. В контроллере, где вы хотите, чтобы передать информацию:

ProfileViewController *controller = self.tabBarController.viewControllers[4]; 
controller.fieldValues = PFLogInFieldsFacebook | PFLogInFieldsDefault; 

Тогда в viewDiLoad из ProfileViewController, сделайте следующее:

[self setFields:self.fieldValue]; 
+0

привет, я придерживался этого подхода, чтобы получить доступ к контроллеру представления, но странно я не мог изменить представление с этого контроллера представления (не отражается на симуляторе). есть ли какой-либо дополнительный шаг Мне нужно выполнить? – Bob

+0

@Bob, возможно, потому, что представление контроллеров еще не загружено. Когда экземпляр контроллера панели вкладок создается, все его контроллеры содержимого также создаются, но только контроллер на первой вкладке вызывает вызываемый viewDidLoad. Вы можете передать данные контроллеру # 5 и изменить его вид в viewDidLoad или viewDidAppear. – rdelmar

+0

@Bob, я отредактировал свой ответ, чтобы показать вам, что я имею в виду, передавая данные. – rdelmar

0

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

[self.tabBarController setSelectedIndex:yourIndex]; 

Ваш код будет выглядеть так:

UIViewController *controller = self.tabBarController.viewControllers[4]; 
[controller setFields:PFLogInFieldsFacebook | PFLogInFieldsDefault]; 
[self.tabBarController setSelectedIndex:4]; 

Наслаждайтесь :)

+0

привет это выглядит многообещающим, но когда я пытаюсь это сделать, «представление» не обновляется. как вы можете видеть, я пытаюсь добавить в поле «PFLogInFieldsFacebook» значение «view», но поле не отображается. :(есть ли какие-либо идеи относительно того, почему это происходит? – Bob

0

От компании Apple Документация относительно instantiateViewControllerWithIdentifier:

You use this method to create view controller objects that you want to manipulate and present programmatically in your application. Before you can use this method to retrieve a view controller, you must explicitly tag it with an appropriate identifier string in Interface Builder.

+0

привет, я думаю, что я помечаю его «loginviewcontroller» уже. – Bob

+0

Вы не можете назначить как NSString («loginviewcontroller») значение тега (NSInteger) – Dinesh

+0

привет, я запутался, он говорит «пометьте его соответствующей строкой идентификатора», но почему я должен дать ему значение NSInteger? – Bob

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