通过发件人

时间:2015-05-05 07:19:32

标签: swift uibutton

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

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

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

@IBAction func mainButton(sender: UIButton) {
    println(sender)
}

15 个答案:

答案 0 :(得分:21)

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

@IBAction func mainButton(sender: UIButton) {
    println(sender.tag)
}

编辑:为了更具可读性,您可以使用与所选标记对应的值定义枚举。因此,如果您为按钮设置了012等标记,则可以在类声明上方执行以下操作:

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")
    }
}

答案 1 :(得分:14)

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

斯威夫特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...")
    }
}

答案 2 :(得分:6)

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

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

答案 3 :(得分: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
        }
    }

答案 4 :(得分:4)

您必须将tag值设置为您需要的值并使用

进行访问
sender.tag

答案 5 :(得分:3)

假设你给了他们所有正确的名字@IBOutlets:

@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
    }
}

答案 6 :(得分:3)

Swift 4

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

答案 7 :(得分:2)

您可以这样做,只需要为所有按钮添加标签,并按照以下步骤操作:

@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")
        }

    }

答案 8 :(得分:1)

在这种情况下,您可以使用NSObject extension辅助功能元素UIAccessibility

我用过accessibilityLabelaccessibilityIdentifier都成功完成了呼叫和条件检查。

第一 您可以在情节提要中为身份检查器中的每个按钮设置辅助功能LabelIdentifier。应该启用辅助功能。

enter image description here

要通过

检查/识别按钮
@IBAction func selectionPicker(_ sender: UIButton){
        if sender.accessibilityLabel == "childType"{ //Check by accessibilityLabel
            print("Child Type")
        }
        if sender.accessibilityIdentifier == "roomType"{ //Check by accessibilityIdentifier
            print("Room Type")
        }
        performSegue(withIdentifier: "selectionViewSegue", sender:sender)
    }

在带有Xcode 9.0的Swift 3.2和4.0上

答案 9 :(得分:1)

考虑到您将按钮标记为“ 1”,“ 2”,“ 3”的情况:

@IBAction func mainButton(sender: UIButton) {
    switch sender.titleLabel?.text {
        case "1":
            print("do something when first button is tapped")
        case "2":
            print("do something when second button is tapped")
        case "3":
            print("do something when third button is tapped")
        default:
            () // empty statement or "do nothing"
    }
}

答案 10 :(得分:0)

在我的情况下我做了什么,就像上面的答案我用标签来识别特定按钮,我添加的是我添加了一个UIButton扩展,添加了一个id,以便我可以设置字符串id

我有三个标签为0, 1 and 2

的按钮

然后创建了扩展名

extension UIButton {
    var id: String {
        let tag = self.tag

        switch tag {
            case 0:
                return "breakfast"

           case 1:
               return "lunch"

           case 2:
               return "dinner"

           default:

               return "None"
       }
    }
  }

当访问IBAction中的按钮时,我只会打电话:

sender.id

答案 11 :(得分:0)

请改用插座,标记会使代码混乱,并使可读性变差。考虑一下这个可怜的开发人员,该开发人员接下来读取代码并看到Convo .joins('LEFT JOIN users ON users.id IN (convos.sender_id, convos.recipient_id) LEFT JOIN connects ON users.id IN (connects.requestor_id, connects.requestee_id)') .where(connects: { requestor_id: nil, requestee_id: nil }) ,这根本没有任何意义。

我的例子:

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") } } [...] } 来做到这一点,这会变得更好。

在Swift 5.1上测试

答案 12 :(得分:-1)

我不是上述任何人的粉丝:

switch sender as! NSObject {
case self.buttoneOne:
    println("do something when first button is tapped")
case self.buttoneTwo:
    println("do something when second button is tapped")
default:
    println("default")

}

答案 13 :(得分:-1)

选择第一个按钮并为其赋予标签0,然后选择第二个按钮并为其赋予标签1,依此类推,在操作中检查标签位并在标签位的基础上执行功能。:
Select your first button and give it tag 0, and select second button and give it tag 1 and so on, in action check the tag bit and perform you functionalities on the basis of tag bit.

答案 14 :(得分:-1)

快捷键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")
    }
}

快乐的编码:)