簡體   English   中英

如何將字符串數據發送到 UIButton 標簽?

[英]How to send string data to UIButton tag?

有沒有辦法將字符串值發送到UIButton標簽? 我知道tagInt類型,但我需要發送字符串值。

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

我需要將button.tag作為字符串發送

您可以使用accessibilityLabel來代替標簽。

btn.accessibilityLabel = "ABC"

創建 UIButton 的自定義類並創建一個String類型的屬性,如customTag

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

將自定義類分配給您的 UIButton 並通過以下代碼使用字符串類型標記。

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

再來一個答案。

代替accessibilityLabel / accessibilityIdentifier或任何其他與可accessibility相關的,讓我們去layer.name

Button.layer.name = "abc123"

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

原因:

以防萬一,我們需要為每個屏幕設置可訪問性,那時它可能會影響。

但是,如果我們需要為UIButton添加另一層,它不會影響

不幸的是,標簽只是一個整數值。 你可以做的是:

  • 子類UIButton並添加您自己的屬性
  • 使用關聯對象,例如https://gist.github.com/mjjimenez/7956352
  • 使用枚舉作為標簽; 也許添加一個擴展來訪問它們
  • (錯誤)使用accessibilityIdentifier

只需創建UIButtonNSObjectextension

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)

如果你創建一個NSObjectextension

strCustomTag可以從任何類或任何 UI 元素訪問,例如UIButtonUITextFieldUIView等。

無需更改現有的storyboardXIB文件

無法將標簽設置為 String,因為它的類型是 Int。

很可能您無論如何都不需要設置它,因為使用 UIView 的標簽不是一種常見的技術。

如果您仍想使用類似的解決方案(我建議不要),那么您可以使用 String 的accessibilityIdentifier屬性。

您還可以使用自定義 String 屬性創建 UIButton 的自定義子類,並使用此自定義子類而不是 UIButton

您可以為按鈕創建自定義類,然后您可以通過在自定義類中定義屬性來傳遞任何類型的值。

示例:我想在 Button 中傳遞 String 和 Int 這兩個值,所以我將 Int 傳遞給按鈕標簽,字符串將傳遞給自定義按鈕屬性。

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

視圖控制器類

class HomeVC: UIViewController {

    let customButton = CustomButton()

    override func viewDidLoad() {
        super.viewDidLoad()

        customButton.stringToPass = "Your String"
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM