如何使用switch语句查找是否按下了UIButton?

时间:2011-11-18 20:24:43

标签: ios nsstring uibutton uiimage switch-statement

我正在制作一个ios应用程序,但是在使用switch语句查看是否按下了UIButton元素时遇到了问题。 这就是我希望最终产品发挥作用的人:我有多个无色图像(无色我指的是白色,UIImage)。当点击未着色的图像时,子视图打开时带有彩色框(UIButton,其中24个,每个都有单独的颜色)。选择彩色框按钮并按下工具栏上的后退按钮时,子视图将关闭,原始视图将重新显示,而未显示的图像(选择用于打开子视图的图像)现在使用在子视图中选择的所需颜色进行着色

我想使用switch语句来查找未选择的图像和选择的颜色(所有UIButton元素)。我不知道在switch语句中将什么作为表达式放置,因为我正在处理UIButtons。 switch语句的其余部分比较UIButton元素的值,看它是否等于YES(当按下按钮时),如果是,则返回一个字符串。我还想知道如何将IBAction连接到UIImage(因此当点击图像时,子视图打开)。

2 个答案:

答案 0 :(得分:5)

我在iOS开发上有点生疏,但您可能会做以下事情:

将按钮设置为相同的事件处理程序,并使用sender属性访问按钮的标记元素,您可以为每个按钮指定。

- (IBAction) doStuff:(id) sender {
UIButton *button = (UIButton*) sender;
switch(button.tag)
{
   //do stuff
}

如果这对您不起作用,您可以使用您认为合适的任何按钮属性来区分它们,例如标题,标题颜色等。

对于最佳实践,我建议您在尝试将其转换为对象之前检查发件人是否为UIButton类型。

答案 1 :(得分:1)

对于 Swift 3.0 ,我们不再需要观察标签了。只需保留对按钮的引用(IBOutlet或某些私有变量),然后使用Identifier Pattern打开按钮本身。

import UIKit

class Foo {
    // Create three UIButton instances - can be IBOutlet too
    let buttonOne = UIButton()
    let buttonTwo = UIButton()
    let buttonThree = UIButton()

    init() {
        // Assign the same selector to all of the buttons - Same as setting the same IBAction for the same buttons
        [buttonOne, buttonTwo, buttonThree].forEach{(
            $0.addTarget(self, action: Selector(("buttonTapped")), for: .touchUpInside)    
        )}
    }

    func buttonTapped(sender: UIButton) {
        // Lets just use the Identifier Pattern for finding the right tapped button
        switch sender {
        case buttonOne:
            print("button one was tapped")
        case buttonTwo:
            print("button two was tapped")
        case buttonThree:
            print("button three was tapped")
        default:
            print("unkown button was tapped")
            break;
        }
    }
}

// Example
let foo = Foo()
foo.buttonTapped(sender: foo.buttonOne)