从不同的View控制器访问属性

时间:2013-01-07 23:54:39

标签: objective-c ios cocoa-touch uiviewcontroller

我的一个视图控制器中有一个像这样声明的属性:

@property (nonatomic, retain) MPMusicPlayerController *musicPlayer;

如何从其他视图控制器访问此属性?请记住,我正在使用故事板,而不是以编程方式加载视图。

我对此有点新鲜......谢谢。

详情

我的根视图控制器中嵌入了一个包含该属性的TableViewController。然后我有另一个从根视图控制器推送的视图控制器。按下此视图时,我希望调用[musicPlayer play],但现在它无法识别musicPlayer。

3 个答案:

答案 0 :(得分:1)

一种方法是,您可以#import视图控制器到其他视图控制器并以这种方式访问​​属性。对于故事板,您可以在父视图和子视图之间使用控制器的prepareForSegue:方法。在子视图中尝试类似childView *child = (childView *)segue.destinationViewController;

的内容

答案 1 :(得分:1)

您需要使用其他控制器的musicPlayer属性获取对视图控制器的引用。你如何得到这取决于两个控制器的相关性。是一个呈现另一个?一个人推到另一个?一个是另一个的孩子吗?这些不同的关系需要不同的方式来访问另一个控制器。您需要提供有关您的应用结构的更多信息,以便我更全面地回答。

编辑后:

实施prepareForSegue,以便您可以将信息传递给您呈现的视图控制器:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    TriggerViewController *dvc = (TriggerViewController *)segue.destinationViewController;
    dvc.tableViewReference = segue.sourceViewController.childViewControllers[0]
}

这里tableViewReference是控制器中的一个属性,您尝试访问musicPlayer(tableViewReference应该是TriggerViewController类)。然后,在那个课程中你可以像这样打电话:

[tableViewReference.musicPlayer play];

答案 2 :(得分:0)

然后,您不必从根视图控制器访问musicPlayer属性,而是从表视图控制器访问。所以它会是这样的:

[rootViewController.containerView.tableViewController.musicPlayer play];