ios - swift : 方法选择器的问题 #selector
伊谢尔伦
伊谢尔伦 2017-04-18 09:16:31
[iOS讨论组]
    let singleTap = UITapGestureRecognizer(target: self, action: #selector(LiveHallTableVC.singleTapAction))
    
        func singleTapAction() {
        print("点击图")
    }
    

不带参的方法可以,没有问题。带个参就不懂了,求助 :

    func singleTapAction(num : Int) {
        print("点击\(num)图")
    }

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
黄舟

action参数需要的其实是一个用#selector(xx)的方式实现的key,等真正需要的时候才会根据这个key去获取函数真正的地址,它只是个key不是真正的方法,所以你在初始化gesture的时候在#selector传什么参数都是没用的

selector的有固定的写法,#selector大约是Swift2.2之后的写法,括号里需要写函数名字,对于有参数的用“:”表示,例如func test(a:Int,b:Int) 相应的selector写法就是#selector(test(_: b:))

对于gesture的action是系统约定好的,只有一个参数就是gesture自己,所以相应的func都会写成 xxGestureAction(gesture: UIGestureRecognizer)的形式

如果你在action里需要更多的数据,你可以子类化相应的UIGestureRecognizer

巴扎黑

你需要先写一个接受传参的方法,比如下面这个。

func singleTapAction(tap:UITapGestureRecognizer) {
    print("\(tap.view)")
}

然后这样使用它,

   let singleTap = UITapGestureRecognizer(target: self, action: "singleTapAction:")

当然,xcode会提示你,上面的写法已经废弃,请使用下面的方法。

   let singleTap = UITapGestureRecognizer(target: self, action: #selector(ViewController.singleTapAction(_:)))
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号