Swift自定义工具栏实现

时间:2015-07-28 17:23:21

标签: ios swift segue uitoolbar xcode-storyboard

我正在尝试实现自定义UIToolbar。工具栏目前有5个按钮:3改变页面上的内容(保持相同的工具栏选择了切换项目)&另外两个segue到模态视图控制器。

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

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

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

我一直在考虑的另一个解决方案是拥有一个带有工具栏的VC。通过按下按钮,我将能够更改该VC的视图。这也有问题,我不能在故事板中设置AutoLayout,因为VC没有任何东西,只是更改了视图本身。当我需要一些带有约束的复杂视图时,这将成为一个问题。

我列出的两种方法中的任何一种都是可取的吗?如果没有,我应采取什么方法&我应该如何实施这些变化?

1 个答案:

答案 0 :(得分:0)

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

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

在斯威夫特:

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

func yourMethod() {
   (code here)
}

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

祝你好运!