Как передать данные viewcontroller через панель вкладок Controller - PullRequest
12 голосов
/ 31 января 2012

Я хочу передать данные из контроллера представления в контроллер просмотра через контроллер панели вкладок.

Я имею в виду, что моя раскадровка выглядит следующим образом.

View Controller → Tab Bar Controller → VC1/VC2/VC3

Для этого япытался использовать PrepareforSegue, но это не удалось.
Код здесь.

(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
friendsDetailViewController* vc = [[friendsDetailViewController alloc] init];
vc = (friendsDetailViewController*)[segue destinationViewController];

vc.candidateid = [[NSString alloc] init];
vc.candidateid = [candidateid objectAtIndex:selectedIndexPath.row];

Хотя я пытался передать данные из VC в VC1, SIGABT произошло в последней строке.


Обновление:

Я понял, как.Вот сценарий:

friendsDetailViewController* vc = [[friendsDetailViewController alloc] init];
UITabBarController* tbc = [segue destinationViewController];
vc = (friendsDetailViewController*)[[tbc customizableViewControllers] objectAtIndex:0];

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

Ответы [ 2 ]

0 голосов
/ 20 ноября 2014

У меня была такая же проблема. У меня была NSString, которую я хотел отправить вот так:

View Controller → Tab Bar Controller → VC1/VC2/VC3

Прежде всего я создал ViewController-s и TabBarController классы и связал их с раскадровкой .

Это сработало для меня:

Сначала давайте отправим данные из ViewController в TabBarController :

  1. добавить последовательность для подключения ViewController и TabBarController в раскадровке и назвать его: toMyTabController
  2. добавить свойство, которое вы хотите изменить в TabBarController :

    @property (strong, nonatomic) NSString *name;

  3. добавить этот метод где-то в ViewController.m:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if([segue.identifier isEqualToString:@"toMyTabController"]) { MyTabController *tabController = (MyTabController *)segue.destinationViewController; tabController.name = @"SOME AWESOME NAME"; } }

=============================================== =================================== Теперь давайте отправим данные из TabBarController в ViewController

  1. Добавьте свойство в каждый ViewController, куда вы хотите отправить информацию, и дайте ему имя (очень креативно). добавьте это в ** ViewController1.h, ViewController2.h, ViewController3.h

    @property (strong, nonatomic) NSString *name;

  2. добавить это к ViewController1.m , ViewController2.m , ViewController3.m

    @synthesize name;

  3. перейдите на TabBarController.m и добавьте его в ViewDidLoad метод:

for (UIViewController* myController in self.viewControllers) { if([myController respondsToSelector:@selector(setName:)]) { [myController performSelector:@selector(setName:) withObject:self.name]; } }

Вот и все, Надеюсь, поможет. Удачи

0 голосов
/ 20 февраля 2014

В дочерних контроллерах контроллеров панели вкладок вы можете легко передавать данные с помощью

[self.parentViewController.view setAccessibilityValue:@"your data"];

и легко получать доступ к этим данным в других дочерних контроллерах панели вкладок

, или вы можете добавить объект вnsuserdefaults для некоторого ключа и присоедините этот ключ в parentviewcontroller.view .. получите этот объект, используя objectforkey из nsuserdefaults в следующем viewcontroller

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...