Swift - 确定用开关按下了哪个按钮
Swift - determine which button was pressed with switch
我有 4 个按钮调用一个函数。根据按下哪个按钮,我需要将按钮隐藏在 pressing.I 之后调用的函数中,我不知道按下了哪个按钮,所以我尝试为 4 个按钮中的每一个分配标签以通过标签识别它们并使用 switch
我试过了
switch sender.tag {
case 1:
self.button1.hidden = true
case 2:
self.button2.hidden = true
case 3:
self.button3.hidden = true
case 4:
self.button4.hidden = true
}
但这不起作用编译器说使用未解析的标识符'sender'
如何正确执行此操作?
编辑:
全功能
if self.allowMistakeVar {
let mistakeAlert = UIAlertController(title: "Here is title!", message: "message of alert", preferredStyle: .Alert)
let okay = UIAlertAction(title: "OK", style: .Cancel) { UIAlertAction in
self.allowMistakeVar = false
self.allowMistakeButton.enabled = false
switch sender.tag {
case answer1Text:
self.answer1Text.hidden = true
case answer2Text:
self.answer2Text.hidden = true
case answer3Text:
self.answer3Text.hidden = true
case answer4Text:
self.answer4Text.hidden = true
}
}
mistakeAlert.addAction(okay)
self.presentViewController(mistakeAlert, animated: true, completion: nil )
} else {
另一个案例..
}
将您的代码放在下面,如下所示:
func btnSomeButtonClicked(sender: UIButton)
{
let tag = sender.tag;
//put your same code here and either use tag variable as i shown or put as you did.
}
--> 因此,您将很容易收到发件人的 属性。
-->还要检查你是否忘记给 UIButtons 添加标签。
为什么你总是想用标签来确定 UIButton ?如果被调用的函数有一个sender参数那么你就知道通过这个参数调用这个函数的UIButton。
func buttonClicked(sender: UIButton)
{
switch sender {
case button1: // Do something
case button2: // Do some other stuff
...
default: ()
}
}
试试这个,
1) 为每个按钮分配标签
Button1.tag=1
Button2.tag=2
Button3.tag=3
Button4.tag=4
2) 然后检查你常用的按钮动作
func buttonClicked(sender: UIButton)
{
switch sender.tag {
case 1: self.sender.hidden = true //button1
break;
case 2: self.sender.hidden = true //button2
break;
case 3: self.sender.hidden = true //button3
break;
case 4: self.sender.hidden = true //button4
break;
default: ()
break;
}
}
而不是使用 switch 语句,您可以直接使用发件人。
请注意,您需要指定发送者是一个 UIButton(因此这仅在仅从按钮调用该函数时才有效)。
@IBAction func submitButton(sender: UIButton) {
/* extra code here */
sender.enabled = false
}
这减少了代码,还允许您添加额外的按钮而无需更改代码。
我知道这已经得到解答,但是如果您在 IB 中设置它,那么我建议您使用 @IBOutlet 变量作为案例来检查按钮是否被按下。
class SomeView: UIView {
@IBOutlet weak var buttonA: UIButton!
@IBOutlet weak var buttonB: UIButton!
@IBOutlet weak var buttonC: UIButton!
@IBAction func didHitButton(_ sender: UIButton) {
switch sender {
case buttonA:
doThis()
}
case buttonB:
doThat()
}
case buttonC:
doThisAgain()
}
default:
doNothing()
}
}
...
}
现在您将 NIB 中的按钮连接到每个 @IBOutlet,并将所有按钮连接到一个 @IBAction didHitButton。
这非常简单,您不必担心标签或更改名称。
我有 4 个按钮调用一个函数。根据按下哪个按钮,我需要将按钮隐藏在 pressing.I 之后调用的函数中,我不知道按下了哪个按钮,所以我尝试为 4 个按钮中的每一个分配标签以通过标签识别它们并使用 switch
我试过了
switch sender.tag {
case 1:
self.button1.hidden = true
case 2:
self.button2.hidden = true
case 3:
self.button3.hidden = true
case 4:
self.button4.hidden = true
}
但这不起作用编译器说使用未解析的标识符'sender'
如何正确执行此操作?
编辑:
全功能
if self.allowMistakeVar {
let mistakeAlert = UIAlertController(title: "Here is title!", message: "message of alert", preferredStyle: .Alert)
let okay = UIAlertAction(title: "OK", style: .Cancel) { UIAlertAction in
self.allowMistakeVar = false
self.allowMistakeButton.enabled = false
switch sender.tag {
case answer1Text:
self.answer1Text.hidden = true
case answer2Text:
self.answer2Text.hidden = true
case answer3Text:
self.answer3Text.hidden = true
case answer4Text:
self.answer4Text.hidden = true
}
}
mistakeAlert.addAction(okay)
self.presentViewController(mistakeAlert, animated: true, completion: nil )
} else {
另一个案例.. }
将您的代码放在下面,如下所示:
func btnSomeButtonClicked(sender: UIButton)
{
let tag = sender.tag;
//put your same code here and either use tag variable as i shown or put as you did.
}
--> 因此,您将很容易收到发件人的 属性。
-->还要检查你是否忘记给 UIButtons 添加标签。
为什么你总是想用标签来确定 UIButton ?如果被调用的函数有一个sender参数那么你就知道通过这个参数调用这个函数的UIButton。
func buttonClicked(sender: UIButton)
{
switch sender {
case button1: // Do something
case button2: // Do some other stuff
...
default: ()
}
}
试试这个,
1) 为每个按钮分配标签
Button1.tag=1
Button2.tag=2
Button3.tag=3
Button4.tag=4
2) 然后检查你常用的按钮动作
func buttonClicked(sender: UIButton)
{
switch sender.tag {
case 1: self.sender.hidden = true //button1
break;
case 2: self.sender.hidden = true //button2
break;
case 3: self.sender.hidden = true //button3
break;
case 4: self.sender.hidden = true //button4
break;
default: ()
break;
}
}
而不是使用 switch 语句,您可以直接使用发件人。
请注意,您需要指定发送者是一个 UIButton(因此这仅在仅从按钮调用该函数时才有效)。
@IBAction func submitButton(sender: UIButton) {
/* extra code here */
sender.enabled = false
}
这减少了代码,还允许您添加额外的按钮而无需更改代码。
我知道这已经得到解答,但是如果您在 IB 中设置它,那么我建议您使用 @IBOutlet 变量作为案例来检查按钮是否被按下。
class SomeView: UIView {
@IBOutlet weak var buttonA: UIButton!
@IBOutlet weak var buttonB: UIButton!
@IBOutlet weak var buttonC: UIButton!
@IBAction func didHitButton(_ sender: UIButton) {
switch sender {
case buttonA:
doThis()
}
case buttonB:
doThat()
}
case buttonC:
doThisAgain()
}
default:
doNothing()
}
}
...
}
现在您将 NIB 中的按钮连接到每个 @IBOutlet,并将所有按钮连接到一个 @IBAction didHitButton。
这非常简单,您不必担心标签或更改名称。