如何从不同的视图访问一个视图上的对象?

时间:2012-02-03 16:07:13

标签: objective-c ios uitabbarcontroller

我有一个带有两个标签的标签栏控制器:

  • tabBar1View,带有一个名为“openDifferentView”的按钮和一个文本字段 “myvalue”,文字“test”
  • tabBar2View,其中包含一个名为的文本字段 “txtInTab2”

当我点击openDifferentView时,我希望tabBar2View显示,并将值“test”(从tabBar1View.myvalue.text)传递给txtInTab2(在tabBar2View中)。

我看到使用[self.tabBarController setSelectedIndex:1]显示的视图,但我不确定如何从此视图设置其文本字段的值。

我认为这是可能的:

UIViewController *tab2;
tab2 = [self.tabBarController.viewControllers objectAtIndex:1];
tab2.txtInTab2.text = "something"; //doesn't work
tab2.show; //don't know how to this

编辑:我已经在tabBar2View中为textfield添加了IBOutlet @ property / @ synthesize,在tabBar1View中添加了#import“tabBar2View.h”。

2 个答案:

答案 0 :(得分:0)

UIViewController没有名为txtInTab2的属性。 txtInTab2是您添加到自己的UIViewController子类(您称之为TabBar2View)的属性。

代码基本上是正确的,但您需要将tab2定义为它实际上是什么类型的视图控制器。从下面的评论中,它实际上是一个导航控制器,所以你需要这样做:

#import "MyViewController.h"

UInavigationController *tab2;
tab2 = [self.tabBarController.viewControllers objectAtIndex:1];

//now lets get the frontmost view controller in the navigation controller
//which will (hopefully) be your custom view controller class
TabBar2View *viewController = (TabBar2View *)tab2.topViewController;

//now before we set the label, we need to make sure that the
//view controller's view has actually been loaded from its nib
//file. calling its view property forces it to load
[viewController view];

//now we can set the label
viewController.txtInTab2.text = @"something"; //this will work now

然后要实际显示它,你需要通过标签栏控制器这样做:

[self.tabBarController setSelectedIndex:1]; //show the second tab

答案 1 :(得分:0)

您需要使用代理人。我认为this将为您提供有关如何开始的良好帮助