如何在另一个选项卡中将消息发送到viewcontroller

时间:2011-10-01 09:44:59

标签: ios ipad

我为我的iPad应用程序使用了UiTabBarController。其中一个标签是带收藏夹的UITableView。当我点击一个单元格时,我希望收藏夹在另一个选项卡中的viewController中打开。

我通过在单例中分配变量然后通过[self.tabBarController setSelectedIndex:2]选择另一个选项卡来解决它的丑陋方式;

在目标viewController的ViewWillAppear中,我从单例中读取值,然后执行所有操作。

必须有一个正确的方法来做到这一点。如何在另一个选项卡中引用ViewController的实例?有没有办法在选项卡中加载另一个viewController?

任何?

2 个答案:

答案 0 :(得分:0)

您可以使用viewControllers属性在Tab视图中获取所有视图控制器。

来自文档:

  

此属性的默认值为nil。配置选项卡栏控制器时,可以使用此属性为选项卡栏界面的每个选项卡指定内容。数组中视图控制器的顺序对应于选项卡栏中的显示顺序。因此,索引0处的控制器对应于最左侧的选项卡,索引1处的控制器对应于右侧的下一个选项卡,依此类推。如果视图控制器中的视图控制器数量超过了标签栏,则数组末尾的视图控制器将由更多导航控制器管理,该控制器本身不包含在此数组中。

答案 1 :(得分:0)

为表视图控制器创建委托协议:

@protocol MyTableViewControllerDelegate <NSObject>

- (void) myTableViewController: (MyTableViewController *) myTableViewController didSelectSomeObject: (MyClass *) object

@end

并为委托创建一个属性:

@property (nonatomic, assign) IBOutlet id<MyTableViewControllerDelegate> delegate;

然后使第二个视图控制器成为表视图控制器的委托 - 通过在界面构建器中挂起它们,或者如果知道它们两者,则在应用程序委托中。

然后,只要选择了表中的一行,就调用委托方法,该方法将通知另一个视图控制器。