所以我有一个带有3个按钮的故事板我想为所有这3个按钮创建1个动作,并根据他们的标签/ ID决定做什么...
有没有办法为每个按钮获取某种标识符?
顺便说一下,他们是图像,所以他们没有标题。
@IBAction func mainButton(sender: UIButton) {
println(sender)
}
答案 0 :(得分:21)
您可以在故事板中为每个按钮设置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")
}
}
答案 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)
@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
。
我用过accessibilityLabel
和accessibilityIdentifier
都成功完成了呼叫和条件检查。
第一
您可以在情节提要中为身份检查器中的每个按钮设置辅助功能Label
或Identifier
。应该启用辅助功能。
要通过
检查/识别按钮@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)
答案 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")
}
}
快乐的编码:)