如何修改关联同一IBAction的多个UIButton的默认触发事件?
别担心,这个基础问题其实很多刚上手iOS开发的小伙伴都会遇到,我来给你拆解两种解决方法,帮你搞定Touch Down事件的设置~
方法一:在Storyboard/XIB中可视化修改
这是最直观的方式,适合习惯用界面编辑器的同学:
- 打开你的Storyboard或者XIB文件,找到需要修改的按钮
- 右键点击按钮(或者按住Control键点击按钮),弹出关联菜单
- 在菜单里找到你已经创建的那个IBAction(比如叫
buttonPressed(_:)),你会看到当前绑定的触发事件(默认是Touch Up Inside) - 点击事件名称旁边的小箭头,就能在下拉列表里选择你需要的
Touch Down了 - 第二个按钮重复同样的操作,找到同一个IBAction,把触发事件改成
Touch Down就行
方法二:用代码动态设置事件
如果觉得界面操作麻烦,或者需要更灵活的控制,用代码绑定事件会更靠谱:
- 首先确保你的两个按钮都已经通过IBOutlet连接到Swift文件里,比如:
@IBOutlet weak var firstButton: UIButton! @IBOutlet weak var secondButton: UIButton!
- 在
viewDidLoad()方法里,先移除按钮原有可能绑定的事件(避免重复触发),再添加Touch Down事件到同一个IBAction:
override func viewDidLoad() { super.viewDidLoad() // 先移除默认的Touch Up Inside事件(如果是从Storyboard关联的) firstButton.removeTarget(self, action: #selector(buttonPressed(_:)), for: .touchUpInside) secondButton.removeTarget(self, action: #selector(buttonPressed(_:)), for: .touchUpInside) // 绑定Touch Down事件到同一个IBAction firstButton.addTarget(self, action: #selector(buttonPressed(_:)), for: .touchDown) secondButton.addTarget(self, action: #selector(buttonPressed(_:)), for: .touchDown) } @objc func buttonPressed(_ sender: UIButton) { // 这里写你的按钮触发逻辑,比如修改图片之类的 if sender == firstButton { // 第一个按钮的操作 } else if sender == secondButton { // 第二个按钮的操作 } }
另外补充一下:你说拖放第二个按钮到IBAction时没法选事件,是因为系统默认会沿用这个IBAction最初创建时的触发事件,但没关系,拖放完成后按照上面方法一的步骤修改就行啦~
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

