iOS多按钮识别实现:如何判断已按下的目标按钮?
解决方案:识别之前点击的按钮
这事儿好办,咱们一步步来实现你要的功能:
1. 先添加一个变量记录最后点击的按钮
在你的ViewController类里,添加一个私有可选变量,用来存储用户最后点击的那三个按钮之一:
class ViewController: UIViewController { // 用来存储最后被点击的目标按钮 private var lastTappedButton: UIButton? // 你的其他代码(IBOutlet、其他方法等)... }
2. 更新三个按钮的点击事件
修改你已有的三个按钮的@IBAction方法,每次点击时把当前按钮赋值给上面的变量:
@IBAction func btn1(_ sender: UIButton) { lastTappedButton = sender // 这里保留你原来btn1的业务逻辑(如果有的话) } @IBAction func btn2(_ sender: UIButton) { lastTappedButton = sender // 这里保留你原来btn2的业务逻辑(如果有的话) } @IBAction func btn3(_ sender: UIButton) { lastTappedButton = sender // 这里保留你原来btn3的业务逻辑(如果有的话) }
3. 完善识别按钮的点击事件
现在给你的identifyWhichPressed方法添上逻辑,判断并打印之前点击的按钮:
@IBAction func identifyWhichPressed(_ sender: UIButton) { // 先检查有没有点击过目标按钮 guard let tappedButton = lastTappedButton else { print("还没点击过三个按钮中的任何一个哦!") return } // 这里提供几种判断方式,选适合你的就行: // 方式一:通过按钮的Tag识别(需要先在Storyboard/代码里给三个按钮设置Tag:1、2、3) switch tappedButton.tag { case 1: print("之前点击的是按钮1") case 2: print("之前点击的是按钮2") case 3: print("之前点击的是按钮3") default: print("未知按钮") } // 方式二:直接比较按钮实例(需要给三个按钮添加IBOutlet引用,比如@IBOutlet weak var btn1: UIButton!) /* if tappedButton === btn1 { print("之前点击的是按钮1") } else if tappedButton === btn2 { print("之前点击的是按钮2") } else if tappedButton === btn3 { print("之前点击的是按钮3") } else { print("未知按钮") } */ // 方式三:通过按钮标题识别(如果三个按钮的title唯一的话) /* switch tappedButton.title(for: .normal) { case "按钮1": print("之前点击的是按钮1") case "按钮2": print("之前点击的是按钮2") case "按钮3": print("之前点击的是按钮3") default: print("未知按钮") } */ }
小提示
- 如果用Tag的方式,记得在Storyboard里选中对应按钮,在右侧属性面板的
Tag栏设置数值(比如btn1设为1,btn2设为2,以此类推)。 - 如果用实例比较的方式,要确保你已经给三个按钮添加了IBOutlet关联(在Storyboard里按住Ctrl从按钮拖到ViewController代码里生成)。
- 这个逻辑会记录最后一次点击的按钮,如果用户多次点击不同按钮,识别的是最新的那一次。
内容的提问来源于stack exchange,提问作者user9683424
相关产品推荐
相关产品推荐

