2011-04-27 20 views
2

我正在開發一個以橫向模式啓動的iPad應用程序。即使應用程序處於橫向模式,也會調用willHideViewController

第一個屏幕顯示一個UISplitViewController,我的問題是,altough應用程序是在橫向模式下的委託上splitViewController:willHideViewController:withBarButtonItem:forPopoverController:儘管該文件指出,通知:

當拆分視圖控制器從旋轉 景觀以縱向 爲準,它通常隱藏其中的視圖控制器 。當 發生時,它將此方法調用爲 ,將其餘的自定義視圖控制器的工具欄(或導航欄)的按鈕添加到 。如果您要 彈出窗口中顯示即將隱藏的視圖 控制器,則必須實現此 方法並使用它將指定的 按鈕添加到您的界面。

由於該應用程序處於橫向模式,而不是過渡到肖像我不明白爲什麼我的代表被通知。爲什麼這樣?

回答

0

valentin,爲了直接回答「爲什麼是這樣?」,我認爲答案很簡單,就是它在實現其API時的一個錯誤。

因爲你似乎已經發現,當在橫向方向時,它調用上面的時候,它似乎應該不是,然後調用splitViewController:willShowViewController:invalidatingBarButtonItem:。

此外,我發現,當縱向時,它發送一個非常早的消息(即在view.frame被調整之前)到splitViewController:willHideViewController:withBarButtonItem:forPopoverController:

我看到最讓我惱火的一件事是,使用從他們的模板創建中提供的代碼,按鈕欄會出現,然後在啓動時消失。

我的解決方案是實施一個解決方法,我在[email protected]上發佈了:johnnkdoe/freeforall.git,類KludgeWorkaroundForBuggySplitViewDelegateStartup。

使這個當前的詳細視圖控制器類的父類,如

//@interface MyViewController : UIViewController<UISplitViewControllerDelegate> 
@interface MyViewController : KludgeWorkaroundForBuggySplitViewDelegateStartup 

這將設置初始按鈕欄標題母版,如果你沒有你喜歡的東西。您可以通過在您的子類實現中重寫@property getter來覆蓋它。如果你想要做的不僅僅是這個kludgeWorkaround類的東西,你可以在做自己的工作之前自己覆蓋它們(複製和粘貼或者)在它們上面調用[super ...]。

我不能說這解決了我看來是一個執行錯誤的問題,但是解決方法是在橫向模式下啓動分屏控制器應用程序時擺脫了按鈕欄的簡短外觀。

相關問題