2011-06-04 179 views
0

我創建通過下面的代碼子視圖的視圖,我AppDelegate.m文件訪問子視圖在當前視圖

//in AppDelegate.m file 
//Initializeing the navcon, photoviewtable and default loading page 
self.navcon = [[UINavigationController alloc]init]; 
self.photoViewTable = [[PhotoTableViewController alloc]init]; 
self.loadingPage = [[LoadingPageViewController alloc]init]; 

[self.photoViewTable.view addSubview:loadingPage.view]; 

[navcon pushViewController:photoViewTable animated:NO]; 
[self.window addSubview:navcon.view]; 

我如何進入子視圖LoadingPage.view當我在PhotoTableViewController.view

回答

3

你試圖在同一時間使用兩個視圖控制器:

self.photoViewTable = [[PhotoTableViewController alloc]init]; 
self.loadingPage = [[LoadingPageViewController alloc]init]; 

[self.photoViewTable.view addSubview:loadingPage.view]; 

如果LoadingPageViewController是一個UIViewController子類,上面的代碼不正確。除了像UINavigationViewController這樣的「容器」視圖控制器,在給定的時間內應該只有一個視圖控制器處於活動狀態。請參閱this SO thread中的my answer以獲得更全面的情況介紹。簡而言之,UIViewController是爲了管理整個屏幕的內容,而且你從UIViewController獲得的大部分功能都涉及到管理這些屏幕。

但是,爲了更直接地回答您的問題,我們可以忽略多個UIViewController問題,並查看每個對象的責任。既然你已經創建了一個對象(loadingPage)來管理一些視圖,那麼photoViewTable應該真的讓LoadPage完成它的工作並避免直接操作loadPage的視圖。爲PhotoTableViewController指定一個指向LoadingPageViewController的指針,以便photoViewTable可以將消息發送到loadingPage。

+0

感謝您的回覆和建議。實際上,我打算在這裏做的只是隱藏/取消隱藏顯示中的loadingPage視圖。因此,例如,如果某個動作被觸發,我想要執行類似「loadingPage.view.hidden = NO」的操作來顯示加載頁面,否則將其隱藏。這個可以嗎?或者你有其他建議嗎? – Zhen 2011-06-04 12:30:12

+0

我只是擺脫loadPage並給PhotoTableViewController一個加載視圖,它可以管理自己。它似乎已經做了幾乎這樣,因爲它顯然知道它何時加載以及何時不加載。但是,如果你不想這樣做,給它一個指向loadPage對象的指針,並告訴loadPage它已經開始或停止加載。該對象可以管理這些視圖。真的,盡你所能,但如果你要使用控制器對象的麻煩,你應該讓它控制它的視圖。否則,它是爲了什麼? – Caleb 2011-06-04 13:40:16

+0

你能告訴我我該怎麼做嗎?我試圖添加創建一個UIView *子視圖並將其添加到phototableviewcontroller.view,但子視圖似乎不顯示。無論如何,這是你建議的方法嗎? – Zhen 2011-06-04 14:34:09

5

使用tag財產UIView讓您的loadingPage.viewPhotoTableViewController

loadingPage.view.tag = 111; 
[self.photoViewTable.view addSubview:loadingPage.view]; 

在您的photoViewTable類中。

LoadingPageViewController* myLoadingPage = (LoadingPageViewController*) [self.view viewWithTag:111]; 
4

除非通過引用或標記標記它,否則應該可以像這樣得到它。

for (UIView *subview in self.view.subviews) { 
    if ([[subview nextResponder] isMemberOfClass:[LoadingPageViewController class]]) { 
     // 'subview' is your view 
    } 
}