2012-04-29 41 views
3

我可能過於複雜,但有沒有辦法訪問模態父項的屬性?iOS - 訪問Modal的父屬性

所以,我稱之爲「presentModalViewController」,然後我可以訪問視圖控制器上的一些屬性,從模態中調用它。

感謝, 阿什利

+0

以我的經驗,我總是使用委託模式來獲取/設置當前呈現模式的視圖的parentView屬性。 – Sakares 2012-04-29 14:03:15

回答

1

好了,既然問這個問題我已經試過這看上去好像他們的工作,但沒有一些技巧。

這樣的例子就是這樣。

((pController *)self.parentViewController).testString; 

然而,雖然這是一個普通的UIViewController所呈現的模式,家長實際上是一個的UITabBarController,甚至使用selectedViewController沒有工作。

我的解決辦法是添加到我的模式的.h文件中

id delegate; 

@property (nonatomic, assign) id delegate; 

在實現文件中合成它後,分配/初始化的modalViewController,但呈現了,我只是之前設置

modalViewController.delegate = self; 

這樣我就可以在我的模態中調用self.delegate。這仍然是不夠的,因爲這並沒有說哪個瀏覽器是的,所以我不能說

self.delegate.testString; 

但我前面學到的鑄造讓我得到

((pController *)self.delegate).testString; 
一個完全可行的解決方案

我希望我不只是喋喋不休,我希望這可以幫助未來的人。

+2

正確的方法是定義一個協議,並將委託定義爲id 委託。那麼在訪問點上,你可以調用self.delegate.testString而不是強制轉換。 – fengd 2012-05-02 14:16:03

4

,如果您使用的是iOS 5,你可以調用self.presentingViewController訪問父視圖控制器

這裏是apple reference

+0

我讓這個應用程序支持較舊的iOS版本,所以我不能這樣做。 謝謝無論如何。 – 2012-04-29 14:47:04

2

你的答案是接近正確的 - 你想presentingViewController而非parentViewController,但是這可能如果你不小心,會導致緊密耦合(兩個類之間的依賴關係,這意味着它們只能與對方一起工作)。

這是最好還是定義一個協議,但你的委託財產是沒有必要的 - 這將具有相同的值作爲presentingViewController財產。

+0

presentsViewController僅適用於iOS5,並且這需要與舊版本兼容。 – 2012-04-29 14:48:13