Подтвердить что ты не робот

Как передать диспетчер представлений данных через панель вкладок Контроллер

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

Я имею в виду, моя раскадровка такая.

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 произошло в последней строке.


Обновление:

Я понял, как это сделать. Вот script:

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

  • добавьте segue для подключения ViewController и TabBarController в раскадровке и назовите его: toMyTabController
  • добавить свойство u хотите изменить в TabBarController:

    @property (strong, nonatomic) NSString *name;

  • добавьте этот метод где-нибудь в 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

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

    @property (strong, nonatomic) NSString *name;

  • добавьте это в ViewController1.m, ViewController2.m, ViewController3.m

    @synthesize name;

  • перейдите в TabBarController.m и добавьте это в метод ViewDidLoad:

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

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