关于button的传参问题

关于button的传参问题

怎么才可以让button的@selector里面传多个参数(我知道最多只能传一个),但有没有其他的方法(不用storybook),来穿多个参数呢?如课程里,想用button响应方法来做,怎么才可以把这几个Label传进来?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

可以传多个参数啊,你就先写好多个参数的方法,然后在@selector()里面怎么写呢。假设是click方法,没有参数就是@selector(click),如果有一个参数就是@selector(click:)加一个冒号,两个参数呢就是@selector(click::)两个冒号就可以了。所以是可以传多个参数的哦。

  • qq_风中素语_0 提问者 #1
    那这种带多个冒号传参的方式具体用到那些地方呢?
    2017-11-07 22:28:27
  • Tender10 回复 提问者 qq_风中素语_0 #2
    这个可以根据你的需求,比如登录的时候,需要登录名和密码,那这个时候后面可以跟两个参数,用户名,和密码,进行验证的时候,你可以将用户输入的用户名和密码传递给这个方法,然后在这个方法里进行判断用户输入的和之前注册的是否一致。所以具体使用的时候还是需要看场景的哦。
    2017-11-08 09:40:36
Bger 2017-12-13 23:51:43

这个地方我正好也想问呢.. 我感觉UI部分的很多addtarget方法默认@selector都是只能传递自身. 剩下的要获取只能通过类内部变量来获取.   感觉代码不是那么爽啊. 毕竟其他语言的方法调用的时候都可以赋多个参数..

  • 多个参数的方法也可以进行传递啊,@selector(click::)两个冒号就可以,这样就表示的是两个参数啦。如果是一个参数那就是@selector(click:),如果没有参数那就@selector(click)就可以啦。
    2017-12-14 09:41:31
  • Bger 回复 Tender10 #2
    这个支持传多参数是理解的. 主要是"系统自带UI组件"的默认都是1个参数. 如果要多参数的话. 其实就算你写了好几个:号. 但是定义的方法是收不到参数的,压根就没人给他赋值啊... 例如UIButton相关的. 就像您举例的我给UIButton2个参数@selector(click::) 那我定义的click方法第一个参数获取UIButton. 那第二个参数根本就没地方赋值.. 除非有的系统组件自带withObject方法.. 不知道您是否明白我想问的意思.. iOS中使用performSelector:withObject:withObject:方法最多传递两个参数 [self performSelectorOnMainThread:<#(nonnull SEL)#> withObject:<#(nullable id)#> waitUntilDone:<#(BOOL)#>] 解决方案:1. 使用NSInvocation进行消息转发从而实现对performSelector的多参数传递 2. 使用runtime中的objc_msgSend进行消息的发送
    2017-12-14 11:16:46
  • Tender10 回复 Bger #3
    这个方法你需要去实现啊,这里只是要去调用这个方法,直接在下面的方法中实现参数的赋值即可。
    2017-12-14 11:30:14
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
iOS进阶:界面优化与数据存储
  • 参与学习       516    人
  • 提交作业       158    份
  • 解答问题       637    个

本路径采用基础+案例方式,助你解开对界面优化、数据储存、屏幕适配的疑惑。6小时团购项目实战加最新版本Swift讲解,让你掌握更多iOS开发技巧。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师