我在我的故事板中创建了一个选项卡栏,我将其链接到一个 swift 文件以添加一些属性,并且一切正常。但后来我决定更改导航控制器,现在我无法设置添加到选项卡栏的属性。
有人知道如何设置选项卡栏控制器的属性吗? (我真的没有看出标签栏和标签栏控制器之间的区别)。
UITabBarController
是一种特殊的 UIViewController
,具有内置 UITabBar
。因为标签栏已经包含在此类中,所以无需为标签栏设置 @IBOutlet
,或添加委托协议一致性。在选项卡栏 ViewController 类定义中,您只需通过变量名称 tabBar
引用选项卡栏,其他所有内容都将与屏幕截图中的完全相同(我在本答案的底部包含了一张图片以进行比较。 )
要使其正常工作,必须首先正确设置
UITabBarController
ViewController。以下是我采取的步骤:
在新的 Xcode 项目中,删除默认的 ViewController.swift 文件并从 Main.storyboard 中删除视图控制器。
从右上角的
+
Library 菜单中,向下滚动,直到找到 Tab Bar Controller。它应该位于其他视图控制器的部分中。将其中之一拖放到现在空的故事板上。
在左侧边栏的文件菜单中,右键单击 -> 新文件 -> Cocoa Touch Class -> 将其命名为您想要的任何名称(我只选择“ViewController”),对于 子类:,选择
UITabBarController
。您不必选中“同时创建 XIB 文件”框。
在 Main.storyboard 中,选择
UITabBarController
,然后在属性检查器(位于右侧边栏中)下,将其类设置为您在上一步中选择的任何名称。现在,当您在“调整编辑器选项”下的 Assistant 模式下查看它们时,您可以看到连接到故事板项目的 .swift 文件 - 就像您在屏幕截图中一样。
将屏幕截图中当前拥有的所有选项卡栏外观设置复制并粘贴到视图控制器的
viewDidLoad
方法中,但进行此更改:到处都有“tabBarMenu”(这似乎是您旧的名称) @IBOutlet?),将其更改为“tabBar”。
您应该在 View Controller .swift 文件中得到以下内容:
import UIKit
// This is not the same class as UITabBar! No delegate protocol conformance is needed (it's already built in to this kind of View Controller)
class ViewController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
// The controller's Tab Bar doesn't need (or even allow) an @IBOutlet, because the UITabViewController class is designed with the Tab Bar built-in and already assigned to the name "tabBar"
// Here are all the same settings you had in your screenshot:
tabBar.layer.shadowColor = UIColor.gray.cgColor
tabBar.layer.shadowOpacity = 0.5
tabBar.layer.shadowOffset = CGSize.zero
tabBar.layer.borderColor = UIColor.clear.cgColor
tabBar.layer.borderWidth = 0
tabBar.clipsToBounds = false
tabBar.backgroundColor = UIColor.white
UITabBar.appearance().shadowImage = UIImage()
UITabBar.appearance().backgroundImage = UIImage()
}
}