2011-11-10 53 views
0

我不想添加一個子視圖,而是將「self.view」更改爲另一個視圖,例如(警告視圖),然後在用戶禁止警告後我想切換回來。當我嘗試切換回原始視圖時,我只是因爲我無法理解的原因而出現空白屏幕。UIViewController和UITableViewController,如何更改self.view然後再回來?

這是我目前在我的UITableViewControllers

//Show warning view controller 
self.warningViewControler = [[[WarningViewController alloc] init] autorelease]; 
self.view = self.warningViewController.view; 


//Then later 
self.view = self.tableView; //<< Dosnt work 
+0

「Dosnt work」是什麼意思?它會給你一個錯誤還是它不會產生你期望的結果?另外,這種方法不是黑幕嗎?當你重新分配self.view時,tableView是否會被釋放和處理?如果您顯示警告,爲什麼不使用UIAlertView呢? –

+0

@ pixelchild是否有一個原因,你不只是在當前的視圖控制器模態提供WarningViewController?這將是執行此操作的簡單/一致的方式。 –

+2

你做錯了,這不是iOS視圖體系結構應該如何工作的方式,而且你將一直面臨着艱苦的戰鬥。您需要將其嵌入爲子視圖,或者創建新視圖*和*新視圖控制器,然後將其呈現給用戶。 –

回答

0

之一,如果你想改變你的看法,如果原來的視圖定義/鏈接到的XCode,你必須改變自己之前保留。查看另一個視圖。否則,原始視圖將被釋放,並且使用它可能會導致不好的事情發生。

警告:

self.warningViewControler = [[[WarningViewController alloc] init] autorelease]; 
self.view = self.warningViewController.view 

是個很壞很壞的電話。因爲您自動釋放控制器,但您使用其視圖。因此,在一段時間後,您可以使用已釋放的控制器保留視圖。保留控制器並在不再需要視圖時自行釋放。

+0

謝謝,我真的覺得這是不好的做法。我不使用模態視圖的原因是因爲我想保留導航欄和選項卡欄。但不能將其作爲子視圖插入。 – jennas

0

這裏是更好的方法做什麼,我認爲你正在試圖做的:

WarningViewController *warningViewController = [[WarningViewController alloc] initWithNibName:@"theRightNiborNil" bundle:nil]; 

[self presentModalViewController:warningViewController animated:YES]; 

// or if you don't need to support iOS4 any more: 

[self presentViewController:warningViewController animated:YES completion:nil] 

// and if you aren't using ARC yet, then [warningViewController release]; 

然後在你的WarningViewController你想要一些行動調用:

[self dismissModalViewControllerAnimated:YES]; 

// or again if this is iOS5.. 

[self dismissModalViewControllerAnimated:YES completion:nil]; 

希望有所幫助。

相關問題