【问题标题】:How to pass Int64/Int32 values through UIButton Swift如何通过 UIButton Swift 传递 Int64/Int32 值
【发布时间】:2016-08-08 20:45:34
【问题描述】:

我想将一个 Int64/32 值从我的对象传递给一个按钮,以便它执行进一步的操作。但是btn.tag 需要一个Int 值,所以它会给出一个错误,如果我将obj.id 更改为Int,那么它只会从数字中获取前几个数字。

cellBtn = UIButton(frame: CGRect(x: 150, y: 30, width: 100, height: 100))
        cellBtn.backgroundColor = .greenColor()
        cellBtn.setTitle("Test", forState: .Normal)

    //obj.id is Int64 value
        cellBtn.tag = obj.id

        cellBtn.addTarget(self, action: #selector(btnU), forControlEvents: .TouchUpInside)
        cell?.addSubview(cellBtn)

        return cell!

    func btnU(sender: UIButton!) {
        print("hey")
        print(sender.tag)

    }

我怎样才能从cellBtn to btnU 传递obj.id 以便btnU 有来自obj.id 的信息

【问题讨论】:

  • 我认为子类UIButton 并给它一个新属性比如var id : Int64 可能会更好。
  • 请问你用这些标签做什么?
  • 我认为你错过了 (:) 尝试 #selector(ClassName.btnU(_:)

标签: ios swift uiview uibutton


【解决方案1】:

视图控件并不是用来保存数据的。

您可以使用按钮标记作为数据数组的索引。 (我会在数组索引中添加一个常量值,以便只有特定范围内的非零标签才能引用数组中的条目。(假设按钮标签从 100 开始。您将从标签号中减去 100 并将其用作一个数组索引。)就保留 MVC 设计模式而言,这可能是最简洁的方式。然后您可以拥有一个具有您需要的任何属性的结构数组。

您可以按照@NSGangster 的建议将 UIButton 子类化并向子类添加 Int64 属性。

您可以使用关联存储将新对象附加到按钮实例,但这有点“hack-ish”。

【讨论】:

    【解决方案2】:
    1. 我不建议在 UI 元素上传递值,您应该为此目的使用模型对象。

    2. 我不建议使用“tag”属性,因为它太通用了。你永远不知道 wwitch 框架会像你一样使用和更改相同的标签值。

    但如果必须,请使用子类,这样您就可以使用 Int64:

    class ByButton: UIButton {
        var myValue: Int64 = 0
    }
    

    或者您可以将运行时属性添加到所有 UIButtons(在第一个解决方案中不太推荐这样做,因为我很难找到,并且会在您的应用程序中添加所有 UIButtons)

    private var buttonValue: Int64 = 0
    extension UIButton {
        var keyBoardHeight: CGFloat {
            get {
                return objc_getAssociatedObject(self, &buttonValue) as! CGFloat
            }
            set { objc_setAssociatedObject(self, &buttonValue, newValue,  objc_AssociationPolicy(rawValue: 0)!) }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多