@objc || private || 按钮的点击事件

Posted iOS学习-文

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@objc || private || 按钮的点击事件相关的知识,希望对你有一定的参考价值。

一、按钮的点击事件

// 3.监听发布按钮的点击
        // Selector两种写法: 1>Selector("composeBtnClick") 2> "composeBtnClick"
        composeBtn.addTarget(self, action: "composeBtnClick", forControlEvents: .TouchUpInside)
     composeBtn.addTarget(self, action: Selector("composeBtnClick"), forControlEvents: .TouchUpInside)

 

二、按钮的点击方法应该如何写

1. 第一种写法,不添加 private,因为一旦添加,该方法就不会被添加到方法列表中,但这么写就代表,在其他类中也可以拿到这个方法

func composeBtnClick() {
        print("composeBtnClick")
    }

2. 第二种写法,使用private,但需要在其前面添加一个@objc,这样这个方法既是私有方法又可以添加到方法列表中

 @objc private func composeBtnClick() {
        print("composeBtnClick")
    }

 

 

原话如下:

// MARK:- 事件监听
extension MainViewController {
    // 事件监听本质发送消息.但是发送消息是OC的特性
    // 将方法包装成@SEL --> 类中查找方法列表 --> 根据@SEL找到imp指针(函数指针) --> 执行函数
    // 如果swift中将一个函数声明称private,那么该函数不会被添加到方法列表中
    // 如果在private前面加上@objc,那么该方法依然会被添加到方法列表中
    @objc private func composeBtnClick() {
        print("composeBtnClick")
    }
}

 

以上是关于@objc || private || 按钮的点击事件的主要内容,如果未能解决你的问题,请参考以下文章

多个按钮用一个点击事件

如何使用其他 objc 函数的变量? (长按并添加按钮)

iOS 利用运行时交换系统方法实现禁止同时点击两个按钮触发多个事件

'#selector'的参数不引用Swift按钮目标中的'@objc'方法,属性或初始化程序

有关于winform的 点击主窗体的按钮隐藏子窗体?

unity点击按钮后可以使隐藏的物体显示出来