iOS中视图的人类可读标签/ ID

时间:2018-12-26 21:17:09

标签: ios xcode

比方说,我已经使用界面构建器创建了一个带有一些视图的UI(不是用代码,所以不是以编程方式)。

如何为这些视图分配可读的ID /标签,以便可以在代码中引用它们?

我知道我可以使用属性检查器为视图分配一个整数标签,然后创建一个字典(或枚举)来存储标签到视图的映射。但是,这是一种容易出错的方法,而且伸缩性也很差(在复杂的应用程序中,将整数标签分配给数百个视图……)。

是否有针对此问题的更好解决方案?有没有一种方法可以直接向视图分配人类可读的标签/ id,例如“ resumeButton”?

更新: 这是我要实现的示例方案:

    具有五个不同按钮的
  • UI;按钮上有图片,没有标题
  • 所有五个按钮都通过代码连接到同一IBAction
  • 在IBAction中,我有一个switch语句,以便根据单击哪个按钮来执行不同版本的代码

更新2:

解决方案

我最终实现了一个简单的自定义视图:

@IBDesignable
class CustomButton: UIButton {
     @IBInspectable var stringTag: String = defaultID
}

这样,我可以在Interface Builder中看到一个附加属性stringTag,并且可以直接在Interface Builder中直接向其中添加一个值。

3 个答案:

答案 0 :(得分:2)

根据您所描述的声音,对我来说,您正在寻找的是Outlets

答案 1 :(得分:2)

您可以在UIView上创建扩展属性以存储identifier字符串。如果您将该扩展属性设置为IBInspectable,则可以直接从情节提要中设置和查看它。

在此答案中设置此类属性的更多详细信息:

https://stackoverflow.com/a/37166043/1830999

UIView的内置tag属性只是一个整数,因此对于阅读它的人来说不是很描述。

答案 2 :(得分:2)

您对标记没错。与Interface Builder的每个连接都应使用IBActionIBOutlet处理。

由于您说每个按钮都有不同的操作,所以最简单的解决方案是为每个按钮创建一个单独的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
   }
}