gpt4 book ai didi

ios - 在通用应用程序中纵向使用 UITabBarViewController 但横向使用 UISplitViewController

转载 作者:搜寻专家 更新时间:2023-10-30 23:11:15 25 4
gpt4 key购买 nike

我想在纵向的 iPhone 上使用 UITabBarViewController,在纵向的 iPhone 6/6+ 或横向的 iPad 上使用 UISplitViewController。在 iPad 或 iPhone 6/6+ 横向上时,选项卡栏项目在最顶层的 View Controller 中显示为 UITableViewCells。

我真的希望调用对象不必担心设备或方向,而是将 View Controller 作为输入传递给纵向 iPhone 上的选项卡栏中以及 iPad 和 iPhone 6 上的 Root View Controller 中/6+ 横向。

这是我的意思的直观表示:

UISplitViewController/UITabBarController

我认为也可以使用标签栏图像属性将图像放置在表格 View 单元格中。我在 Swift 中这样做,我认为对此的策略可能是这样的:

class ResponsiveRootViewController: UIViewController {

var viewControllers: NSArray?
var responsiveTabBarController: UITabBarController?
var responsiveSplitViewController: UISplitViewController?
var responsiveRootViewController: UITableViewController?

override func viewDidLoad() {
super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {

}

}

这可能吗?这已经完成了吗?我是否应该实现一个标签栏 View Controller ,在横向上隐藏其标签栏(这对我来说似乎 super hacky)?当方向改变时,如何将生成的根 TableView Controller (我希望选项卡栏项目存在于其中的 Controller )添加到 View 层次结构中?

最佳答案

我已经弄清楚如何做到这一点,虽然它不包含任何人需要的解决方案,但我已经包含了下面的代码,您可以根据自己的特定需求进行自定义:

SplitTabBarViewController.swift

var rootViewControllers: [UIViewController]
var detailViewController: UIViewController
var aTabBarController: UITabBarController
var aSplitViewController: UISplitViewController
var primaryTabBarTableViewController: SplitTabBarPrimaryTableViewController

init(rootViewControllers: [UIViewController], detailViewController: UIViewController) {
self.rootViewControllers = rootViewControllers
self.detailViewController = detailViewController

self.aTabBarController = UITabBarController()
self.aTabBarController.viewControllers = self.rootViewControllers

self.aSplitViewController = UISplitViewController()
self.primaryTabBarTableViewController = SplitTabBarPrimaryTableViewController(rootViewControllers: self.rootViewControllers)
self.aSplitViewController.viewControllers = [self.primaryTabBarTableViewController, self.detailViewController]

super.init(nibName: nil, bundle: nil)
}

override func viewDidLoad() {
super.viewDidLoad()
if (UIInterfaceOrientationIsLandscape(UIApplication.sharedApplication().statusBarOrientation)) {
self.addSplitViewController()
} else {
self.addTabBarController()
}
}

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
self.removeTabBarController()
self.addSplitViewController()
} else {
self.removeSplitViewController()
self.addTabBarController()
}
}

func addTabBarController() {
self.view.addSubview(self.aTabBarController.view)
self.addChildViewController(self.aTabBarController)
self.aTabBarController.view.frame = self.view.frame
}

func removeTabBarController() {
self.aTabBarController.removeFromParentViewController()
self.aTabBarController.view.removeFromSuperview()
}

func addSplitViewController() {
self.view.addSubview(self.aSplitViewController.view)
self.addChildViewController(self.aSplitViewController)
self.aSplitViewController.view.frame = self.view.frame
}

func removeSplitViewController() {
self.aSplitViewController.removeFromParentViewController()
self.aSplitViewController.view.removeFromSuperview()
}

SplitTabBarPrimaryTableViewController.swift

var rootViewControllers: [UIViewController]

init(rootViewControllers: [UIViewController]) {
self.rootViewControllers = rootViewControllers;

super.init(nibName: nil, bundle: nil)
}

override func viewDidLoad() {
super.viewDidLoad()

self.tableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: "reuseIdentifier")
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.rootViewControllers.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! UITableViewCell

cell.textLabel?.text = self.rootViewControllers[indexPath.row].title

return cell
}

关于ios - 在通用应用程序中纵向使用 UITabBarViewController 但横向使用 UISplitViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29723231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com