如何使用手动 UITabbar 并使用它来切换其他 ViewControllers?
How to use a manual UITabbar and use it to switch through other ViewControllers?
我创建了一个手动 UITabbar,并创建了 3 个 TabBarItem,我想用它们在其他 Viewcontroller 之间切换。我找不到在整个应用程序中使用 BarItems 切换其他 Viewcontroller 的方法。有没有办法以编程方式切换 Viewcontroller ?我正在使用 Swift。
这是我的 ViewController.swift 文件...
class ViewController: UIViewController, UITabBarDelegate {
// All Outlets Connected to StoryBoard
@IBOutlet var BTN: UIButton!
@IBOutlet var BTN2: UIButton!
@IBOutlet var BTN3: UIButton!
@IBOutlet var BTN4: UIButton!
@IBOutlet var tbl: UITableView!
@IBOutlet var Button: UIBarButtonItem!
@IBOutlet var AllButton: UITabBarItem!//First Item
@IBOutlet var TabBar1: UITabBar! //Manual UITabbar
@IBOutlet var PriorityButton: UITabBarItem!//Third Item
@IBOutlet var ClassesButton: UITabBarItem!//Second Item
@IBOutlet var Bar: UINavigationItem!
//Other Variables
var varView = Int()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
if revealViewController() != nil {
Button.target = revealViewController()
Button.action = #selector(SWRevealViewController.revealToggle(_:))
}
self.view.backgroundColor = UIColor(red: 50 / 255.0, green: 132 / 255.0, blue: 255 / 255.0, alpha: 1.0)
BTN.alpha = 1.0
BTN4.alpha = 0
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func BTNClicked(sender: AnyObject) {
UIView.animateWithDuration(1.0, animations: ({
self.BTN2.transform = CGAffineTransformMakeTranslation(0, -90)
self.BTN3.transform = CGAffineTransformMakeTranslation(0, -180)
self.BTN4.transform = CGAffineTransformMakeTranslation(0, 0)
self.BTN.alpha = 0
self.BTN4.alpha = 1.0
}))
}
func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
//This method will be called when user changes tab.
//Do I use this? I am using a manual Tabbar just to remind you guys.
}
UITabBar
只显示一个标签栏,并在用户选择不同的标签时告诉它的代表。 UITabBarController
完全符合您的要求:它管理 collection 视图控制器,当用户选择不同的选项卡时在它们之间切换。使用 UITabBarController
并没有什么神奇的或非程序化的——如果你不想使用故事板,你总是可以在代码中配置一个 UITabBarController
。除非有什么事情没有告诉我们,否则您应该使用 UITabBarController
.
如果您真的只想使用 UITabBar
,您可以在视图控制器中实现 UITabBarDelegate
并将视图控制器设置为选项卡栏的委托。当用户点击一个选项卡时,您的 -tabBar:didSelectItem:
方法将被调用,您可以做任何您想做的事情,包括切换到不同的视图。选项卡栏不会为您进行切换——UITabBar
只是 选项卡栏视图,没有任何用于管理视图或视图控制器的逻辑。
你的问题标题说你想在视图 控制器 之间切换,而不仅仅是视图。但是您可能希望标签栏始终可见。这意味着您需要创建一个视图控制器,该视图控制器维护与选项卡项关联的视图控制器列表,具有 child 视图控制器,并实现 UITabBarDelegate
以替换 child 每当调用 -tabBar:didSelectItem:
时查看控制器。简而言之,您需要复制 UITabBarController
已经完成的工作。
如果您真的想在不使用 UITabBarController 的情况下将 UITabBar 添加到控制器,请尝试以下 class。它只是骨架,只显示您真正需要的内容。此示例假定您已将 UITabBar 添加到情节提要中的控制器,如 @IBOutlet 所示。我亲自试过了,效果很好。
public class MyViewController: UIViewController, UITabBarDelegate {
@IBOutlet var tabBar: UITabBar!
public override func viewDidLoad() {
super.viewDidLoad()
self.tabBar?.delegate = self // this is the important step!
}
public func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
print("selected")
}
}
我创建了一个手动 UITabbar,并创建了 3 个 TabBarItem,我想用它们在其他 Viewcontroller 之间切换。我找不到在整个应用程序中使用 BarItems 切换其他 Viewcontroller 的方法。有没有办法以编程方式切换 Viewcontroller ?我正在使用 Swift。
这是我的 ViewController.swift 文件...
class ViewController: UIViewController, UITabBarDelegate {
// All Outlets Connected to StoryBoard
@IBOutlet var BTN: UIButton!
@IBOutlet var BTN2: UIButton!
@IBOutlet var BTN3: UIButton!
@IBOutlet var BTN4: UIButton!
@IBOutlet var tbl: UITableView!
@IBOutlet var Button: UIBarButtonItem!
@IBOutlet var AllButton: UITabBarItem!//First Item
@IBOutlet var TabBar1: UITabBar! //Manual UITabbar
@IBOutlet var PriorityButton: UITabBarItem!//Third Item
@IBOutlet var ClassesButton: UITabBarItem!//Second Item
@IBOutlet var Bar: UINavigationItem!
//Other Variables
var varView = Int()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
if revealViewController() != nil {
Button.target = revealViewController()
Button.action = #selector(SWRevealViewController.revealToggle(_:))
}
self.view.backgroundColor = UIColor(red: 50 / 255.0, green: 132 / 255.0, blue: 255 / 255.0, alpha: 1.0)
BTN.alpha = 1.0
BTN4.alpha = 0
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func BTNClicked(sender: AnyObject) {
UIView.animateWithDuration(1.0, animations: ({
self.BTN2.transform = CGAffineTransformMakeTranslation(0, -90)
self.BTN3.transform = CGAffineTransformMakeTranslation(0, -180)
self.BTN4.transform = CGAffineTransformMakeTranslation(0, 0)
self.BTN.alpha = 0
self.BTN4.alpha = 1.0
}))
}
func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
//This method will be called when user changes tab.
//Do I use this? I am using a manual Tabbar just to remind you guys.
}
UITabBar
只显示一个标签栏,并在用户选择不同的标签时告诉它的代表。 UITabBarController
完全符合您的要求:它管理 collection 视图控制器,当用户选择不同的选项卡时在它们之间切换。使用 UITabBarController
并没有什么神奇的或非程序化的——如果你不想使用故事板,你总是可以在代码中配置一个 UITabBarController
。除非有什么事情没有告诉我们,否则您应该使用 UITabBarController
.
如果您真的只想使用 UITabBar
,您可以在视图控制器中实现 UITabBarDelegate
并将视图控制器设置为选项卡栏的委托。当用户点击一个选项卡时,您的 -tabBar:didSelectItem:
方法将被调用,您可以做任何您想做的事情,包括切换到不同的视图。选项卡栏不会为您进行切换——UITabBar
只是 选项卡栏视图,没有任何用于管理视图或视图控制器的逻辑。
你的问题标题说你想在视图 控制器 之间切换,而不仅仅是视图。但是您可能希望标签栏始终可见。这意味着您需要创建一个视图控制器,该视图控制器维护与选项卡项关联的视图控制器列表,具有 child 视图控制器,并实现 UITabBarDelegate
以替换 child 每当调用 -tabBar:didSelectItem:
时查看控制器。简而言之,您需要复制 UITabBarController
已经完成的工作。
如果您真的想在不使用 UITabBarController 的情况下将 UITabBar 添加到控制器,请尝试以下 class。它只是骨架,只显示您真正需要的内容。此示例假定您已将 UITabBar 添加到情节提要中的控制器,如 @IBOutlet 所示。我亲自试过了,效果很好。
public class MyViewController: UIViewController, UITabBarDelegate {
@IBOutlet var tabBar: UITabBar!
public override func viewDidLoad() {
super.viewDidLoad()
self.tabBar?.delegate = self // this is the important step!
}
public func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
print("selected")
}
}