如何在Swift中使用一个IBAction用于多个按钮?
我有多个按钮,每个按钮都能切换应用程序的语言。 而不是必须为每个按钮创建多个IBAction是否有办法让它们都连接到一个IBAction并根据按下的按钮更改语言? 我认为在这种情况下使用switch语句会很好,但不能确定如何设置它。
在Interface Builder中,选择Attributes Inspector并为每个按钮设置一个唯一编号的Tag,然后您可以执行以下操作:
@IBAction changeLanguage(sender: AnyObject) { guard let button = sender as? UIButton else { return } switch button.tag { case 1: // Change to English case 2: // Change to Spanish case 3: // Change to French, etc default: print("Unknown language") return } }
要将操作连接到多个按钮 ,请执行以下操作:在界面生成器中,右键单击视图层次结构中的ViewController,然后单击鼠标左键以将操作连接拖动到每个按钮。
是的,转换语句是这里的方式。 对于UIButton,您可以将其链接到用户与按钮交互时调用的选择器,通常是TouchUpInside事件。 addTarget方法和有效的选择器签名(apple.com)其中,你想使用@IBAction func doSomething(sender: UIButton)
或@IBAction func doSomething(sender: UIButton, forEvent event: UIEvent)
格式的方法,以便对触发事件的按钮的引用传递给选择器。
在您的ViewController代码中,您将引用您的UIButtons(可能在故事板中,或手动创建。)假设您有
@IBOutlet weak var frenchButton: UIButton! @IBOutlet weak var spanishButton: UIButton! @IBOutlet weak var englishButton: UIButton!
您可以将它们全部连接到同一个方法,并根据哪个是发件人来分支逻辑。 例如:
@IBAction func changeLanguage(sender: UIButton) { switch sender { case frenchButton: // Change Language to French print ("C'est si bon") case spanishButton: // or Spanish print ("Muy Bueno") case englishButton: // or English print ("It's pretty cool") default: break } }
注意:Swift中的Case语句必须是详尽的,因此您必须包含一个默认情况,即使它永远不应该被调用。
如果您参考按钮,请不要设置标签。
您只需比较参考而不是标记。 这样,您就不会引入新的错误,因为与您自己键入的标记不同,引用是由编译器自动创建的。
@IBOutlet weak var firstButton: UIButton! @IBOutlet weak var secondButton: UIButton! @IBOutlet weak var thirdButton: UIButton! @IBAction changeLanguage(sender: UIButton) { if sender == firstButton { } else if sender == secondButton { } else if sender == thirdButton { } }
- 如何在UITableView静态单元格中dynamic更改单元格高度
- UILabel中的字体不正确 – Ascender或Descender被裁剪
- 链接器错误断言失败:(atom-> fixupCount()== 1)
- 在WatchOS2中使用WatchConnectivity在iOS和WatchOS之间发送消息
- 是否可以在Build Phases的编译源中添加“fno-objc-arc”而不启用非弧文件?
- UIVisualEffectView在不同的设备上呈现不同的效果
- 如何让应用程序商店的名称很长,然后在图标下面有一个简短的名字?
- 我怎样才能从iPhone相机快速处理图像?
- 如何查询和转换Parse.comdate到NSDate /string