【问题标题】:How to send string data to UIButton tag?如何将字符串数据发送到 UIButton 标签?
【发布时间】:2019-04-09 06:26:50
【问题描述】:

有没有办法将字符串值发送到UIButton 标签?我知道tagInt 类型,但我需要发送 string 值。

let myButton: UIButton = {
    let button = UIButton()
    button.tag = "123"
    return button
}()

我需要将button.tag 作为字符串发送

【问题讨论】:

  • 改用accessibilityIdentifier 属性。
  • tag 属性的数据类型为Int(在UIView 上定义并由UIButton 继承)。您无法更改数据类型,因此无法将字符串分配给该属性。如果您可以提供有关您想要实现的目标的更多详细信息,则可能有人可以帮助您解决您的问题 - 但正如我所说,您的问题的简短回答是.
  • accessibilityIndetifier 帮助了我,谢谢

标签: ios swift uibutton


【解决方案1】:

您可以使用accessibilityLabel 代替标签。

btn.accessibilityLabel = "ABC"

【讨论】:

  • 谢谢,这正是我想要的。
【解决方案2】:

创建一个自定义的 UIButton 类并创建一个String 类型的属性,如customTag

class CustomButton: UIButton {
    var customTag:String = ""
}

通过以下代码将自定义类分配给您的 UIButton 并使用 String 类型标记。

let myButton: CustomButton = {
    let button = CustomButton()
    button.customTag = "ABC"
    return button
}()

【讨论】:

  • 谢谢,但我在 UIButton 中使用了accessibilityLabel 作为字符串
  • 好的,不是问题,但是这样你可以添加一个或多个 UIButton 的自定义属性(变量)。
【解决方案3】:

还有一个答案。

而不是 accessibilityLabel / accessibilityIdentifier 或任何其他与 accessibility 相关的,让我们去 layer.name

Button.layer.name = "abc123"

@IBAction func wasPressed(_ sender: UIButton) {
   print("was Pressed     \(sender.layer.name)")
}

原因:

以防万一,我们需要为每个屏幕设置可访问性,届时可能会影响。

但是,如果我们需要为UIButton添加另一层,它不会影响

【讨论】:

    【解决方案4】:

    不幸的是,标签只是一个整数值。 你可以做的是:

    • 子类 UIButton 并添加您自己的属性
    • 使用关联对象,例如https://gist.github.com/mjjimenez/7956352
    • 标签使用枚举;也许添加一个扩展来访问它们
    • (错误)使用accessibilityIdentifier

    【讨论】:

      【解决方案5】:

      只需创建extensionUIButtonNSObject

      extension NSObject {
          private struct AssociatedKeys {
              static var DescriptiveName = "strCustomTag"
          }
      
          var strCustomTag: String? {
              get {
                  return objc_getAssociatedObject(self, &AssociatedKeys.DescriptiveName) as? String
              }
      
              set {
                  if let newValue = newValue {
                      objc_setAssociatedObject(
                          self,
                          &AssociatedKeys.DescriptiveName,
                          newValue as NSString?,
                          .OBJC_ASSOCIATION_RETAIN_NONATOMIC
                      )
                  }
              }
          }
      }
      

      参考以下代码设置strCustomTag的值

      let myButton: UIButton = {
          let button = UIButton()
          button.strCustomTag = "ABC"
          return button
      }()
      

      获得价值

      print(view.strCustomTag)
      

      如果您创建 extensionNSObject

      strCustomTag 可以从任何类或任何 UI 元素访问,例如 UIButtonUITextFieldUIView

      无需更改现有的storyboardXIB 文件

      【讨论】:

      • 感谢accessibilityLabel帮助我
      【解决方案6】:

      无法将标签设置为String,因为它的类型是Int。

      很可能你无论如何都不需要设置它,因为使用 UIView 的标签不是一种常用的技术。

      如果您仍然想使用类似的解决方案(我建议不要),那么您可以使用 accessibilityIdentifier 属性,它是 String。

      您还可以使用自定义 String 属性创建 UIButton 的自定义子类,并使用此自定义子类代替 UIButton

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        • 2020-01-09
        • 1970-01-01
        • 2018-07-25
        • 1970-01-01
        相关资源
        最近更新 更多