我一直关注this tutorial为iPad应用创建自定义标签栏控制器,因为我希望实现垂直标签栏。但是,我希望其中一个标签显示UISplitViewController
,而其他标签只显示UIViewControllers
。我的问题是:
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 :(得分:0)
1)我认为Apple只是建议反对这可能是糟糕的设计,因为他们会引用你Human Interface Guidelines。您不必总是同意他们的建议,并且您的应用很少会因设计选择而被拒绝 - 我唯一的例子就是模仿App Store或其他核心操作系统功能。
2)如果如你所说,这是有效的,我没有看到任何明显的问题。
3)如果它正常工作,你可能不需要做任何事情。但是,这就是Apple如何为Master-Detail应用程序设置模板:
如果您的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
}
}
然后,将它添加到CustomTabBarController中viewDidLoad的末尾:
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