通过发件人获取Swift上的按钮ID

mat*_*att 23 uibutton swift

所以我有一个带3个按钮的故事板,我想为所有这3个按钮创建1个动作,并根据他们的标签/ ID决定做什么...

有没有办法为每个按钮获取某种标识符?

顺便说一下他们是图像,所以他们没有标题.

@IBAction func mainButton(sender: UIButton) {
    println(sender)
}
Run Code Online (Sandbox Code Playgroud)

Vas*_*rov 22

您可以tag在每个按钮的故事板中设置一个.然后你可以这样识别它们:

@IBAction func mainButton(sender: UIButton) {
    println(sender.tag)
}
Run Code Online (Sandbox Code Playgroud)

编辑:为了更具可读性,您可以定义一个枚举,其值与所选标签相对应.所以,如果你喜欢设置标签0,1,2为你的按钮,上面的类声明,你可以这样做:

enum SelectedButtonTag: Int {
    case First
    case Second
    case Third
}
Run Code Online (Sandbox Code Playgroud)

然后,您将拥有以下代码来处理硬编码值:

@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")
    }
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*ani 14

如果您想使用单一方法创建3个按钮,则可以通过以下代码执行此操作...尝试此操作

Swift 3
示例: -

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...")
    }
}
Run Code Online (Sandbox Code Playgroud)


All*_*hau 6

您可以为按钮创建一个插座,然后实现:

@IBAction func mainButton(sender: UIButton) {
    switch sender {
    case yourbuttonname:
        // do something
    case anotherbuttonname:
        // do something else
    default: println(sender)
    }
}
Run Code Online (Sandbox Code Playgroud)


Ner*_*tor 5

您必须将tag值设置为您需要的值并访问它

sender.tag
Run Code Online (Sandbox Code Playgroud)


rac*_*ach 5

假设您将它们的所有专有名称指定为@IBOutlets:

@IBOutlet var weak buttonOne: UIButton!
@IBOutlet var weak buttonTwo: UIButton!
@IBOutlet var weak buttonThree: UIButton!
Run Code Online (Sandbox Code Playgroud)

您可以使用以下内容来确定哪个是哪个

@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
    }
}
Run Code Online (Sandbox Code Playgroud)


mri*_*011 5

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
        }
    }
Run Code Online (Sandbox Code Playgroud)


Jon*_*ann 5

迅捷4-5.1

@IBAction func buttonPressed(_ sender: UIButton) {
        if sender.tag == 1 {
            print("Button 1 is pressed")
        }
}
Run Code Online (Sandbox Code Playgroud)

  • 你在哪里设置标签? (2认同)
  • 您可以在情节提要中设置标签->属性检查器->视图->标签,也可以在viewDidLoad()生命周期函数中设置标签 (2认同)