hen*_*dra 3 custom-controls user-interaction ios uicontrolevents swift
我正在创建一个自定义UI元素,并希望触发自定义UIControlEvent.我已经发现,有一个范围ApplicationReserved.
遗憾的是,这不起作用,因为它"不符合协议'RawRepresentable':
enum MyCustomEvents : UIControlEvents{
case Increase = 0x01000000
case Decrease = 0x02000000
}
Run Code Online (Sandbox Code Playgroud)
两个问题:
1)这是自定义事件的正确方法吗?
2)如何正确定义自定义事件?
谢谢!
DeF*_*enZ 12
由于你想要的只是另一个UIControlEvent,你可以使用(就像你之前一样).applicationReserved作为可用空间定义的范围供你使用.但是,更正确和易于使用的方法是:
(Swift 3.0):
extension UIControlEvents {
static var increased: UIControlEvents { return UIControlEvents(rawValue: 0b0001 << 24) }
static var decreased: UIControlEvents { return UIControlEvents(rawValue: 0b0010 << 24) }
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以轻松地在任何应该使用事件的地方使用此定义,同时还可以方便地使用类型推断(例如sendActions(for: [.valueChanged, .increased])).
声明对我来说也看起来更干净,因为这些位更容易看出它们通过使用移位而不相交.由于.applicationReserved定义为0b1111 << 24,您更明确地使用它的哪些部分.
public如果需要,可以使用这些,并且在var此处计算s或仅分配let常量之间没有太大区别.
由于UIControlEvents是在Swift 2.0中作为OptionSetType的结构创建的,因此您可以以相同的方式创建自定义UIControlEvents.
对于你的问题,它将是
struct MyCustomEvents : OptionSetType{
let rawValue : UInt
static let Increase = MyCustomEvents(rawValue: 0x01000000)
static let Decrease = MyCustomEvents(rawValue: 0x02000000)
}
Run Code Online (Sandbox Code Playgroud)
要将目标/操作添加到此自定义UIControlEvent,您需要将其转换为UIControl事件.
let controlEvent : UIControlEvents = UIControlEvents.init(rawValue: MyCustomEvents.Increase.rawValue)
sliderControl.addTarget(self, action: "increaseAction:", forControlEvents: controlEvent)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1758 次 |
| 最近记录: |