比方说,我已经使用界面构建器创建了一个带有一些视图的UI(不是用代码,所以不是以编程方式)。
如何为这些视图分配可读的ID /标签,以便可以在代码中引用它们?
我知道我可以使用属性检查器为视图分配一个整数标签,然后创建一个字典(或枚举)来存储标签到视图的映射。但是,这是一种容易出错的方法,而且伸缩性也很差(在复杂的应用程序中,将整数标签分配给数百个视图……)。
是否有针对此问题的更好解决方案?有没有一种方法可以直接向视图分配人类可读的标签/ id,例如“ resumeButton”?
更新: 这是我要实现的示例方案:
更新2:
解决方案
我最终实现了一个简单的自定义视图:
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var stringTag: String = defaultID
}
这样,我可以在Interface Builder中看到一个附加属性stringTag
,并且可以直接在Interface Builder中直接向其中添加一个值。
答案 0 :(得分:2)
根据您所描述的声音,对我来说,您正在寻找的是Outlets
答案 1 :(得分:2)
您可以在UIView上创建扩展属性以存储identifier
字符串。如果您将该扩展属性设置为IBInspectable,则可以直接从情节提要中设置和查看它。
在此答案中设置此类属性的更多详细信息:
https://stackoverflow.com/a/37166043/1830999
UIView的内置tag
属性只是一个整数,因此对于阅读它的人来说不是很描述。
答案 2 :(得分:2)
您对标记没错。与Interface Builder的每个连接都应使用IBAction
和IBOutlet
处理。
由于您说每个按钮都有不同的操作,所以最简单的解决方案是为每个按钮创建一个单独的IBAction
:
@IBAction private func onResumeButtonTapped() {
...
}
@IBAction private func onPauseButtonTapped() {
...
}
如果出于某种原因想要保持它们与一个功能的连接,可以使用插座:
@IBOutlet private var resumeButton: UIButton!
@IBOutlet private var pauseButton: UIButton!
@IBAction private func onButtonPressed(_ sender: UIButton) {
switch sender {
case resumeButton:
...
case pauseButton:
...
default:
break
}
}