Получить кнопку нажатой идентификатор на Swift через отправитель

Итак, у меня есть раскадровка с 3 кнопками, я хочу просто создать 1 действие для всех этих трех кнопок и решить, что делать на основе их метки/идентификатора...

Есть ли способ получить какой-то идентификатор для каждой кнопки?

Кстати, это изображения, поэтому они не имеют названия.

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

Ответ 1

Вы можете установить tag в раскадровке для каждой из кнопок. Затем вы можете идентифицировать их следующим образом:

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

EDIT:. Для большей читаемости вы можете определить перечисление со значениями, соответствующими выбранному тегу. Поэтому, если вы установите теги типа 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")
    }
}

Ответ 2

Если вы хотите создать 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...")
    }
}

Ответ 3

Вы можете создать розетку для своих кнопок, а затем реализовать:

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

Ответ 4

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

Ответ 5

Вы должны установить значение tag в соответствии с тем, что вам нужно, и получить к нему доступ с помощью

sender.tag

Ответ 6

Свифт 4 - 5.1

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

Ответ 7

Предполагая, что вы дали им все имена в качестве @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
    }
}

Ответ 8

Вы можете сделать это так: вам нужно дать тег всем кнопкам и сделать вот что:

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

    }

Ответ 9

В этом случае вы можете использовать NSObject extension доступности Element UIAccessibility.

Я использовал accessibilityLabel и accessibilityIdentifier оба являются успешными в проверке вызова и состояния.

Во-первых, вы можете установить Label или Identifier доступности в раскадровке для каждой из кнопок инспектора идентификации. Доступность должна быть включена.

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

На Swift 3.2 и 4.0 с Xcode 9.0

Ответ 10

Учитывая случай, вы пометили свои кнопки "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"
    }
}

Ответ 11

В моем случае, что я и сделал, так же, как и ответы выше, я использовал тег, чтобы идентифицировать конкретную кнопку, то, что я добавил, это то, что я добавил расширение UIButton, которое добавляет идентификатор, чтобы я мог установить идентификатор строки

у меня было три кнопки с тегами 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

Ответ 12

Я не поклонник любого из перечисленных выше:

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

Выберите первую кнопку и присвойте ей метку 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

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

Удачного кодирования :)