Получить кнопку нажатой идентификатор на 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")
}
}
Удачного кодирования :)