我在这里编写简单的代码
self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Cancel, target: self, action: Selector("cancelClick"))
实际功能
func cancelClick(isAlert:String = "yes"){
self.dismissViewControllerAnimated(true, completion: { () -> Void in
if isAlert == "yes" {
Functions.displayAlert("called")
}
})
}
-
self.cancelClick()
- 有效,但如果我没有通过论证
-
self.cancelClick(isAlert:"no")
- 坠毁
那么如果我必须在默认参数中传递参数,我的选择器应该是什么
两者都尝试过Selector("cancelClick")
and Selector("cancelClick:")
但没有运气。
问题是参数是不由你决定。它始终是按钮(“发送者”),这就是only事情可能是这样。
换句话说,如果您希望此函数有一个参数,那么您无论如何都需要将选择器字符串设置为"cancelClick:"
- 冒号表示它需要一个参数。但该参数必须是按钮:
func cancelClick(bbi:UIBarButtonItem?) {
但是,您会注意到我巧妙地将此 UIBarButtonItem 参数设置为可选参数。你认为我为什么这么做?因为现在你可以also直接调用并传递nil:
self.cancelClick(nil)
Thus, cancelClick:
现在有一种方法可以知道呼叫是通过点击按钮还是通过直接呼叫 - 如果bbi
不为零,按钮被点击;如果bbi
isnil,我们是直接从代码调用的。偷偷摸摸的,嗯?
另一种偷偷摸摸的方法是将参数设置为 AnyObject:
func cancelClick(sender:AnyObject) {
它的美妙之处在于你可以用any类实例的类型。cancelClick
可以检查的类型sender
。如果它是一个 UIBarButtonItem (sender is UIBarButtonItem
),然后我们通过点击按钮被呼叫。否则,如果在代码中调用,您可以传入一个字符串或该函数可能准备处理的任何其他内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)