如何通过Tab栏控制器传递数据viewcontroller

时间:2012-01-31 16:46:08

标签: uitabbarcontroller

我想通过标签栏控制器将视图控制器中的数据传递给视图控制器。

我的意思是,我的故事板是这样的。

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];

首先,我必须附上标签栏控制器 其次,检索每个View Controller的指针 您可以使用objectIndex进行选择。

2 个答案:

答案 0 :(得分:0)

在标签栏控制器的childview控制器中,您可以使用

轻松传递数据
[self.parentViewController.view setAccessibilityValue:@"your data"];

可以在tabbar的其他子视图控件中轻松访问此数据

或者您可以在nsuserdefaults中为某个键添加一个对象,并将该键附加到parentviewcontroller.view中。 通过在下一个viewcontroller中使用nsuserdefaults中的objectforkey获取该对象

答案 1 :(得分:0)

我有同样的问题。 我有NSString,我已经这样发送了:

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

除此之外,我创建了 ViewController-s TabBarController 类,并将它们与 storyboard 相关联。

这对我有用:

首先让我们将数据从 ViewController 发送到 TabBarController

  1. 在故事板中添加segue以连接 ViewController TabBarController ,并将其命名为: 的 toMyTabController
  2. 添加属性你想改变 TabBarController

    @property (strong, nonatomic) NSString *name;

  3. 在ViewController.m中的某处添加此方法:

  4. -(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,并将其命名为name(如此有创意) 将此添加到** ViewController1.h,ViewController2.h,ViewController3.h

      @property (strong, nonatomic) NSString *name;

    2. 将此添加到 ViewController1.m ViewController2.m ViewController3.m

      @synthesize name;

    3. 转到 TabBarController.m 并在 ViewDidLoad 方法中添加:

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

      多数民众赞成, 希望能帮助到你。祝你好运