所以我有一个包含3个按钮的故事板,我想只为这3个按钮创建一个操作,并根据它们的标签/ID决定要做什么...
有没有一种方法可以为每个按钮获取某种标识符?
顺便说一下,它们是图像,所以它们没有标题。
@IBAction func mainButton(sender: UIButton) {
println(sender)
}
你可以在storyboard中为每个按钮设置一个tag
,然后可以通过以下方式进行标识:
@IBAction func mainButton(sender: UIButton) {
println(sender.tag)
}
编辑: 为了更易读,您可以定义一个枚举类型,其值对应所选标签。因此,如果您为按钮设置标签,如 0
、1
、2
,在类声明上方,您可以执行以下操作:
enum SelectedButtonTag: Int {
case First
case Second
case Third
}
然后,你将不再处理硬编码的值,而是会有:
@IBAction func mainButton(sender: UIButton) {
switch sender.tag {
case SelectedButtonTag.First.rawValue:
println("do something when first button is tapped")
case SelectedButtonTag.Second.rawValue:
println("do something when second button is tapped")
case SelectedButtonTag.Third.rawValue:
println("do something when third button is tapped")
default:
println("default")
}
}
override func viewDidLoad()
{
super.viewDidLoad()
Button1.tag=1
Button1.addTarget(self,action:#selector(buttonClicked),
for:.touchUpInside)
Button2.tag=2
Button2.addTarget(self,action:#selector(buttonClicked),
for:.touchUpInside)
Button3.tag=3
Button3.addTarget(self,action:#selector(buttonClicked),
for:.touchUpInside)
}
func buttonClicked(sender:UIButton)
{
switch sender.tag
{
case 1: print("1") //when Button1 is clicked...
break
case 2: print("2") //when Button2 is clicked...
break
case 3: print("3") //when Button3 is clicked...
break
default: print("Other...")
}
}
@IBAction func mainButton(sender: UIButton) {
switch sender {
case yourbuttonname:
// do something
case anotherbuttonname:
// do something else
default: println(sender)
}
}
@IBAction func buttonPressed(_ sender: UIButton) {
if sender.tag == 1 {
print("Button 1 is pressed")
}
}
您需要将tag
值设置为所需的内容,并使用以下方式访问它:
sender.tag
@IBOutlet var weak buttonOne: UIButton!
@IBOutlet var weak buttonTwo: UIButton!
@IBOutlet var weak buttonThree: UIButton!
@IBAction func didPressButton(sender: AnyObject){
// no harm in doing some sort of checking on the sender
if(sender.isKindOfClass(UIButton)){
switch(sender){
case buttonOne:
//buttonOne action
break
case buttonTwo:
//buttonTwo action
break
case buttonThree:
//buttonThree action
break
default:
break
}
}
Swift 3代码: 在xcode中,请先为每个按钮设置标签以便按照以下代码工作。
@IBAction func threeButtonsAction(_ sender: UIButton) {
switch sender.tag {
case 1:
print("do something when first button is tapped")
break
case 2:
print("do something when second button is tapped")
break
case 3:
print("do something when third button is tapped")
break
default:
break
}
}
@IBAction func mainButton(sender: AnyObject)
{
switch sender.tag {
case 1:
println("do something when first button is tapped")
case 2:
println("do something when second button is tapped")
case 3:
println("do something when third button is tapped")
default:
println("default")
}
}
Swift 4
在按钮上添加标签
let button = UIButton()
button.tag = 10
点击事件
@IBAction func mainButton(sender: UIButton) {
switch sender.tag {
case 10:
print("10")
case 11:
print("11")
default:
print("yes")
}
}
使用outlets代替标签,标签会使代码混乱,降低可读性。想想那些接下来要阅读代码的可怜开发人员,他们看到if sender.tag = 381 { // do some magic }
,这根本没有任何意义。
我的例子:
class PhoneNumberCell: UITableViewCell {
@IBOutlet weak var callButton: UIButton!
@IBOutlet weak var messageButton: UIButton!
@IBAction func didSelectAction(_ sender: UIButton) {
if sender == callButton {
debugPrint("Call person")
} else if sender == messageButton {
debugPrint("Message person")
}
}
[...]
}
你还可以在一个不错的 switch
语句中完成这个操作,这样会使它变得更好。
在 Swift 5.1 上测试通过。