iOS 14 中的新增功能,我们可以将操作处理程序直接附加到 UIControl:
let action = UIAction(title:"") { action in
print("howdy!")
}
button.addAction(action, for: .touchUpInside)
这本身很酷,但语法却令人恼火。我必须首先形成 UIAction。我必须给 UIAction 一个标题,即使该标题永远不会出现在界面中。难道就没有更好的办法吗?
首先,您不需要提供标题。这是(现在)合法的:
let action = UIAction { action in
print("howdy!")
}
button.addAction(action, for: .touchUpInside)
其次,您实际上并不需要单独的行来定义操作,因此您可以这样说:
button.addAction(.init { action in
print("howdy!")
}, for: .touchUpInside)
然而,这仍然令人恼火,因为现在我在中间有一个关闭addAction
称呼。它应该是一个trailing关闭!显而易见的解决方案是扩展:
extension UIControl {
func addAction(for event: UIControl.Event, handler: @escaping UIActionHandler) {
self.addAction(UIAction(handler:handler), for:event)
}
}
问题解决了!现在我可以用我本来应该被允许的方式说话了:
button.addAction(for: .touchUpInside) { action in
print("howdy!")
}
[额外信息:在哪里sender
在这个故事里?它是在动作里面。 UIAction 有一个sender
财产。所以在该代码中,action.sender
是 UIButton。]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)