2013-01-07 70 views
0

我已經聲明的屬性像這樣在我的視圖控制器之一:訪問屬性不同的視圖控制器的

@property (nonatomic, retain) MPMusicPlayerController *musicPlayer;

我怎麼能訪問其他視圖控制器此屬性?請記住,我正在使用故事板,而不是以編程方式加載視圖。

我對此有點新感謝..謝謝。

詳細

我的根視圖控制器具有嵌入在其內一個TableViewController其中包含屬性。然後我有另一個從根視圖控制器推送的視圖控制器。當這個視圖被推送時,我想要[musicPlayer play]被調用,但是現在它不能識別musicPlayer。

回答

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

+0

2個視圖控制器無關。 – thisiscrazy4

+0

@ thisiscrazy4,好吧,這使得它更加困難,但你仍然需要描述你的結構以幫助我。 – rdelmar

+0

你是否試圖避免循環進口? –

1

那麼一種方法是,您可以#將視圖控制器導入其他視圖控制器並以這種方式訪問​​屬性。對於故事板,您可以在父視圖和子視圖之間使用控制器的prepareForSegue:方法。在子視圖中嘗試類似於childView *child = (childView *)segue.destinationViewController;

+0

我試過,但它不起作用。如果我在其他視圖控制器中執行了[musicPlayer播放]之類的操作,則無法識別musicPlayer。 – thisiscrazy4

+0

由於您使用的是故事板,您可以使用'prepareForSegue'方法,當您在另一個控制器中播放'[musicPlayer play]'時,請參閱更新回答 – wigging

+0

,您是否已經爲視圖控制器分配和初始化?發佈有關您的代碼的更多信息請 – wigging

0

然後,您不必從您的根視圖控制器訪問musicPlayer屬性,而是從您的表視圖控制器訪問。所以它會是這樣的:

[rootViewController.containerView.tableViewController.musicPlayer play]; 
+0

我收到一個錯誤消息說,在'rootViewController'類型的對象上找不到Property'tableViewController'。 – thisiscrazy4

+0

然後你還沒有很好地解釋音樂播放器在哪裏。你說過「我的根視圖控制器內嵌了一個包含屬性的TableViewController」,你的意思是嵌入式的?那究竟在哪裏? –

+0

musicPlayer屬性位於TableViewController中。通過嵌入我的意思是我有我的根視圖控制器中的容器視圖。容器視圖連接到TableViewController。這個截圖可能會有所幫助.. https://www.dropbox.com/s/a8bvgi4rjfv395s/Storyboard.png?m – thisiscrazy4

相關問題