2017-05-10 26 views
3

我一直在關注this tutorial爲iPad應用創建自定義選項卡欄控制器,因爲我想實現垂直選項卡欄。不過,我希望其中一個標籤顯示UISplitViewController,而其他人只顯示UIViewControllers。我的問題是:UISplitViewController作爲自定義選項卡欄控制器的子項

1)這會被應用程序商店接受嗎? Apple的文檔目前聲明增加UISplitViews作爲子視圖不被推薦,但可以用某些容器來實現。任何人有任何這方面的經驗?

2)這裏是我的自定義標籤欄控制器的摘錄。如果secondViewController呈現UISplitView,我可以保持原樣嗎?我的意思是,當我運行它時似乎找到了工作,但它可以接受嗎?

class CustomTabBarController: UIViewController { 

    @IBOutlet weak var tabView: UIView! 
    @IBOutlet var tabButtons: [UIButton]! 

    var firstViewController: UIViewController! 
    var secondViewController: UISplitViewController! 
    var thirdViewController: UIViewController! 
    var viewControllerArray: [UIViewController]! 
    var selectedTabIndex: Int = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     firstViewController = storyboard.instantiateViewController(withIdentifier: "firstVC") 
     secondViewController = storyboard.instantiateViewController(withIdentifier: "secondVC") as! UISplitViewController 
     thirdViewController = storyboard.instantiateViewController(withIdentifier: "thirdVC") 
     viewControllerArray = [firstViewController, secondViewController, thirdViewController] 

     tabButtons[selectedTabIndex].isSelected = true 
     didPressTab(tabButtons[selectedTabIndex])  
    } 

3)我真的不能讓我的周圍是什麼(如果有的話頭)需要AppDelegate去?再次似乎運行良好,但只是想知道它的安全。

謝謝。

+0

如果它運行得很好,那麼它可能會更好將其轉移到Code Review。 – Marc

+0

謝謝 - 會給它一個機會 – Tom

回答

0

1)我相信蘋果只是建議不要這樣做,因爲它們可能是壞的設計,因爲它們會引用您的Human Interface Guidelines。您並不總是必須同意他們的建議,很少會有您的應用因設計選擇而被拒絕 - 我頭頂的唯一例子就是模仿App Store或其他核心操作系統功能。 2)如果如你所說,這是工作,我沒有看到任何明顯的問題。

3)再次,如果它的工作,你可能不需要做任何事情。但這裏的蘋果是如何建立自己的模板,主從應用程序:

storyboard

如果您splitViewController設置這樣和你想的一樣的功能此模板,這裏是你應該如何能得到它。

首先添加這AppDelegate.swift的最底部:

extension AppDelegate: UISplitViewControllerDelegate { 

    func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController:UIViewController, onto 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 
    } 
} 

然後,將它添加到viewDidLoad中的CustomTabBarController結束:

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return} 

let navigationController = secondViewController.viewControllers[secondViewController.viewControllers.count-1] as! UINavigationController 
navigationController.topViewController!.navigationItem.leftBarButtonItem = secondViewController.displayModeButtonItem 

secondViewController.delegate = appDelegate 
+0

感謝您的答覆。對於(3)我猜它是前者!我知道,例如,如果您在Xcode中啓動Master-Detail應用程序,它會在App Delegate中聲明拆分視圖委託,根視圖控制器等。由於設置稍有不同,我很好奇這是否需要,如果是這樣,它是否仍然在那裏或其他地方宣佈。 – Tom

+0

啊,我明白你在說什麼了。將在一分鐘內編輯 – mmd1080

+0

謝謝,會有一個遊戲! – Tom

相關問題