0

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

@property (nonatomic, 保留) MPMusicPlayerController *musicPlayer;

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

我对此有点陌生……谢谢。

细节

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

4

3 回答 3

1

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

于 2013-01-08T00:02:50.887 回答
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 类)。然后,在该课程中,您可以像这样调用 play :

[tableViewReference.musicPlayer 播放];

于 2013-01-08T00:07:50.393 回答
0

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

[rootViewController.containerView.tableViewController.musicPlayer play];
于 2013-01-08T00:41:21.020 回答