Swift 自定义工具栏实现

Posted

技术标签:

【中文标题】Swift 自定义工具栏实现【英文标题】:Swift custom toolbar implementation 【发布时间】:2015-07-28 17:23:20 【问题描述】:

我正在尝试实现自定义 UIToolbar。该工具栏目前有 5 个按钮:3 个更改页面上的内容(保持相同的工具栏并选择切换项)和其他两个转为模态视图控制器。

如何在几个不同的“页面”中分割代码/视图?

我目前有一个名为 ToolbarViewController 的类,它用不同的项目实例化工具栏。它有一个通用动作,可以将按钮标题切换为“ON”,并根据被点击的动作执行不同的动作。需要该工具栏的每个后续 VC 都只是 ToolbarViewController 的子类,并且工具栏会自动创建而无需代码复制。

通过这种方式,如果用户在 tab1 中并按下按钮 1,程序会崩溃,因为从 tab1 到 tab1 没有 segue。我能够解决此问题的一种方法是在 ToolbarViewController 中有一个初始化程序,它接收“currentTab”并且不允许该选项卡的 segues。这似乎非常低效。

我一直在考虑的另一个解决方案是拥有一个带有工具栏的 VC。通过按一个按钮,我将能够更改该 VC 的视图。这也有一个问题,我不能在情节提要中设置 AutoLayout,因为 VC 不会继续任何事情,只会改变视图本身。当我需要一些到处都有约束的复杂视图时,这将成为一个问题。

我列出的 2 种方法中的任何一种都可取吗?如果不是,我应该采取什么方法以及如何实施这些更改?

【问题讨论】:

【参考方案1】:

我认为您应该使用 TabBar 而不是工具栏,因为您可以实现许多相同的功能,我相信您正在尝试更轻松地实现。

但是,如果您决定保留模态序列,则可以为每个工具栏按钮按下设置操作。为您的工具栏按钮提供操作属性。

在斯威夫特中:

UIBarButtonItem(title: "YourTitle", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(YourVC.yourMethod(_:)))

func yourMethod() 
   (code here)

就您的 AutoLayout 问题而言,您应该在 ToolBarViewController 中放置一个空视图,然后使用 nib 创建自定义 UIView 子类。设置您希望每个视图在您的约束下查看笔尖的方式。然后,在代码中,将每个自定义 UIView 子类加载到 ToolBarViewController 上的空视图中。

祝你好运!

【讨论】:

以上是关于Swift 自定义工具栏实现的主要内容,如果未能解决你的问题,请参考以下文章

swift 可自定义的工具提示

swift 可自定义的工具提示

swift使用AVFoundation实现自定义相机

如何在多个视图控制器中使用自定义工具栏而不重复代码和复制元素(swift)?

在 Swift 中自定义栏按钮项

Swift:实现自定义合并策略