亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

iPhone上的肖像中的UISplitViewController顯示詳細的VC而不是master

iPhone上的肖像中的UISplitViewController顯示詳細的VC而不是master

iOS
慕田峪4524236 2019-11-22 13:18:04
我正在Xcode 6中使用Universal Storyboard,目標是iOS 7及更高版本。我已經實現了一個UISplitViewController,現在在運行iOS 8的iPhone上本機支持,而Xcode會自動將其移植到iOS7。它運行得非常好,除了當您在運行iOS 8的iPhone上以肖像模式啟動該應用程序時,拆分視圖的詳細視圖當我希望第一次看到主視圖控制器時,將顯示controller。我認為這是iOS 8的錯誤,因為當您在iOS 7上運行該應用程序時,它會正確顯示主視圖控制器。但是iOS 8現在是通用汽車,并且這種情況仍在發生。我如何設置它,以便在將拆分視圖控制器折疊時(屏幕上僅顯示一個視圖控制器),在顯示拆分視圖控制器時,它顯示主視圖控制器而不顯示詳細信息?我已經在Interface Builder中創建了此拆分視圖控制器。拆分視圖控制器是選項卡欄控制器中的第一個視圖控制器。主VC和詳細VC都是導航控制器,其中嵌入了表視圖控制器。
查看完整描述

3 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

哦,老兄,這讓我頭疼了好幾天,無法弄清楚該怎么做。最糟糕的是,使用master-detail模板創建一個新的Xcode iOS項目效果很好。幸運的是,最后,幾乎沒有什么是我找到解決方案的方法。


我發現有一些帖子建議解決方案是在上實現新primaryViewControllerForCollapsingSplitViewController:方法UISplitViewControllerDelegate。我嘗試了一下都無濟于事。Apple在似乎有效的主從模板中所做的工作是實現新的(深呼吸地說所有這一切)splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:委托方法(再次UISplitViewControllerDelegate)。根據docs,此方法:


請委托人調整主視圖控制器,并將輔助視圖控制器合并到折疊的界面中。


確保閱讀該方法的討論部分以獲取更多具體細節。


Apple處理此問題的方式是:


- (BOOL)splitViewController:(UISplitViewController *)splitViewController

collapseSecondaryViewController:(UIViewController *)secondaryViewController

  ontoPrimaryViewController:(UIViewController *)primaryViewController {


    if ([secondaryViewController isKindOfClass:[UINavigationController class]]

        && [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]]

        && ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) {


        // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.

        return YES;


    } else {


        return NO;


    }

}

此實現基本上執行以下操作:


如果secondaryViewController是我們期望的(a UINavigationController),并且正在顯示我們期望的(a- DetailViewController您的視圖控制器),但沒有模型(detailItem),則Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.“

否則,返回“ NO讓拆分視圖控制器嘗試將輔助視圖控制器的內容合并到折疊的界面中”

對于縱向模式的iPhone(以縱向模式開始或旋轉為縱向模式或更精確的緊湊尺寸級別),結果如下:


如果你的觀點是正確的

并有一個模型,顯示細節視圖控制器

但沒有模型,請顯示主視圖控制器

如果你的觀點不正確

顯示主視圖控制器

清澈如泥。


查看完整回答
反對 回復 2019-11-22
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

這是Swift中公認的答案。只需創建此子類并將其分配到情節提要中的splitViewController。


//GlobalSplitViewController.swift


import UIKit


class GlobalSplitViewController: UISplitViewController, UISplitViewControllerDelegate {


  override func viewDidLoad() {

    super.viewDidLoad()


    self.delegate = self

  }


  func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController!, ontoPrimaryViewController primaryViewController: UIViewController!) -> Bool{

    return true

  }


}


查看完整回答
反對 回復 2019-11-22
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

迅捷版Mark S的正確答案

如Apple的主從模板所提供。


func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController:UIViewController, ontoPrimaryViewController primaryViewController:UIViewController) -> Bool {

    guard let secondaryAsNavController = secondaryViewController as? UINavigationController else { return false }

    guard let topAsDetailController = secondaryAsNavController.topViewController as? DetailViewController else { return false }

    if topAsDetailController.detailItem == nil {

        // Return true to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.

        return true

    }

    return false

}

澄清度

(Mark S所說的有點令人困惑)


該委托方法稱為splitViewController: collapseSecondaryViewController: ontoPrimaryViewController:,因為它就是這樣做的。當更改為更緊湊的寬度尺寸時(例如,將手機從橫向旋轉到縱向時),它需要將拆分視圖控制器僅折疊為其中一個。


此函數返回一個布爾值,以決定是否應折疊Detail并顯示Master。


因此,在本例中,我們將根據是否選擇了詳細信息來決定。我們如何知道是否選擇了我們的詳細信息?如果我們遵循Apple的Master-Detail模板,則詳細視圖控制器應具有一個包含詳細信息的可選變量,因此如果它為nil(.None),則沒有任何選擇,我們應該顯示Master,以便用戶可以選擇某些內容。


而已。


查看完整回答
反對 回復 2019-11-22
  • 3 回答
  • 0 關注
  • 927 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號