如何将字符串数据发送到UIButton标签?

时间:2019-04-09 06:26:51

标签: ios swift uibutton

是否可以将字符串值发送到UIButton标签?

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

我需要以字符串形式发送button.tag

6 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

您可以使用accessibilityLabel来代替标签。

btn.accessibilityLabel = "ABC"

答案 2 :(得分:0)

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

  • 子类UIButton并添加自己的媒体资源
  • 使用关联的对象,例如https://gist.github.com/mjjimenez/7956352
  • 为标签使用枚举;也许添加扩展名以访问它们
  • (误用)accessibilityIdentifier

答案 3 :(得分:0)

由于类型为Int,因此无法将标签设置为String。

由于使用UIView的标记不是一种常见的技术,因此您很有可能无需设置它。

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

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

答案 4 :(得分:0)

只需创建extensionUIButton中的NSObject

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)
  

如果您创建的extension中的NSObject

     

strCustomTag可从任何类或任何UI元素(例如   UIButtonUITextFieldUIView

     

无需更改现有的storyboardXIB文件

答案 5 :(得分:0)

一个答案。

让我们代替accessibilityLabel / accessibilityIdentifier或与accessibility相关的其他任何东西,而让我们继续layer.name

Button.layer.name = "abc123"

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

原因:

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

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