2012-06-10 37 views
2

嗨,並感謝您的建議,爲您提供幫助。在Xcode4中使用ViewControllers時,我遇到了一個非常奇怪的問題。首先,我必須說我不使用故事板,我更願意以編程方式創建任何UI元素。所以我設置了一個UIButton,當我按下時,它會將我帶到一個新的視圖控制器。這是我使用一個按鈕的代碼:UIViewControllers問題

-(void)settingsAndExportHandle:(UIButton *)buttonSender { 
SettingsViewController* settingView = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil]; 
settingView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:settingView animated:YES]; 

}

這個按鈕被初始化,並在RootViewController的的viewDidLoad方法分配。當我按下按鈕時,我想切換到另一個視圖控制器(在這種情況下是SettingsViewController)。

奇怪的是,當我按下按鈕時,翻轉控制器的動畫進行得很順利,但是當它完成時,我獲得了與我在RootViewControllers上相同的事情(相同的自定義視圖,相同的按鈕, !)。問題是:我錯過了什麼?我必須說我使用ARC(自動引用計數),所以我不能釋放或釋放我在RootViewController上創建的視圖和按鈕。

任何幫助將不勝感激。謝謝你們!

+0

Offtopic:'presentModalViewController'已棄用。相反,使用'presentViewController:animated:completion:'。 – Pfitz

+1

我修復了這個!你知道這是什麼問題嗎?新的UIViewController類,我創造了奇怪地在頭文件中的代碼,這行: '@interface SettingsViewController:視圖控制器 @ end' 不幸的是視圖控制器是我的根視圖控制器的名稱。我將該行更改爲UIViewController(也就是說,名爲SettingsViewController的新視圖控制器將是我自己的ViewController(本例中爲我的根控制器)的子類,但是它將是UIViewController的子類(就像它的意思成爲))。 謝謝大家!解決了! – user1447316

+0

這是不可能的+1! – user523234

回答

0

推送和模態呈現視圖控制器確實不是取消分配呈現它們的視圖控制器。它只是將附加視圖控制器添加到堆棧。您需要實現一種回調方法,以便當用戶點擊按鈕以回到根視圖控制器時,您的設置視圖控制器可讓根視圖控制器知道即將發生的事情,以便您可以調用您寫入的方法將界面重新設置回你需要的任何狀態。您也可以使用viewWillAppear:,但這有點麻煩。

然而,根據蘋果人機界面指南,用戶期望的是,當它們推視圖控制器或模態呈現,他們分別對視圖控制器將保存狀態和正好他們離開它時,他們的方式回來。當狀態在導航控制器上下文中不被保留時,這是令人不安和惱人的。它是,尤其是時,它是模態表示。

想想這個 - 用戶是在假想的郵件應用程序。他們開始輸入電子郵件並設置字體大小和顏色。他們點擊添加附件按鈕,這將啓動一個模式視圖控制器,允許他們選擇圖片。他們選擇圖片並且模態視圖被解散,在您的實現中,郵件撰寫界面將被重置,並且電子郵件內容將消失,或者至少選定的字體大小和顏色將恢復爲默認值。這不是一個好的體驗。

相關問題