【问题标题】:Is it possible to get button title from IB in class?是否可以在课堂上从 IB 获取按钮标题?
【发布时间】:2015-07-04 15:10:29
【问题描述】:

我有几个标题为 0 - 9 的按钮,在我的自定义 UIButton 类中,我希望能够使用开关来检查按钮标题。按钮是在情节提要中创建的。 UIButton 类如下所示:

protocol NumpadDelegate: class {
    func changeValue()
}

class NumpadButton: UIButton, NumpadDelegate {

    let initial = String()          // I want to assign the title of the button here
    var alternative = String()
    var change: Bool = false {
        didSet {
            let title = change ? alternative : initial
            setTitle(title, forState: .Normal)
        }
    }

    func changeValue() {
        change = !change
    }
}

有没有办法做到这一点,或者我必须以编程方式创建按钮?我试图限制自定义 UIButton 类的使用,因此我不必为每个按钮创建一个。

编辑:

按要求,按下按钮时的代码:

@IBAction func buttonNumber(sender: UIButton) {
        let value = sender.titleLabel!.text!

        switch value {
        case "C": orderLabel.text = ""
        default: orderLabel.text = orderLabel.text.map { count($0) < 10 ? $0 + value : $0 } ?? value
        }

        if let check = orderLabel.text {
            inputResult.removeAll(keepCapacity: false)

            for index in 0..<items.count {
                let id = items[index].id
                if id.lowercaseString.hasPrefix(check.lowercaseString) {
                    inputResult += [items[index]]
                }
            }

            numpadTableView.reloadData()
        }
    }

我想要做的是,当我滑动按钮时,我希望它们的标题更改为替代 String 即标题 1 的按钮将更改为 A,标题 2 的按钮将更改为 B。

【问题讨论】:

  • 你能告诉我们点击按钮时的按钮点击方法吗?也是所有按钮都调用同一个方法吗?
  • 看起来你无缘无故地把它复杂化了。如果你想要按钮的当前标题,UIButton 上有这个属性 currentTitle 。
  • @KumarNitin 如果我为每个按钮创建一个访问属性的插座,这不会有问题。但我想避免创建多个出口,而是想通过创建一个自定义类并在那里处理事情来解决它。

标签: ios swift uibutton


【解决方案1】:

不要将您的按钮分配给 Interface Builder 中的“引用插座”,而是将它们分配给您可以声明为的“引用插座集合”

 @IBOutlet var buttons: [NumpadButton]

【讨论】:

    【解决方案2】:

    不知道你到底要做什么,但这里有一个例子,我为每个NumpadButton 创建了网点并将它们添加到array

    class ViewController: UIViewController {
    
    @IBOutlet weak var button1: NumpadButton!
    @IBOutlet weak var button2: NumpadButton!
    @IBOutlet weak var button3: NumpadButton!
    @IBOutlet weak var button4: NumpadButton!
    
    var array: NSMutableArray = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        array.addObject(button1)
        array.addObject(button2)
        array.addObject(button3)
        array.addObject(button4)
    }
    

    每个按钮的标题为“1”、“2”、“3”或“4”。然后你可以通过 case 语句检查标题,如下所示:

    override func viewWillAppear(animated: Bool) {
    
        for item in array {
    
            var button = item as! UIButton
    
            switch button.currentTitle! {
                case "1":
                    println("This button has title of 1")
                case "2":
                    println("This button has title of 2")
                case "3":
                    println("This button has title of 3")
                case "4":
                    println("This button has title of 4")
                default:
                    println("default case")
            }
        }
    }
    

    }

    这是您可以使用 case 语句访问 UIButtons 的标题的一种方式,然后只需将应用程序调整为您想要的任何功能(例如,通过 IBAction 等)。

    【讨论】:

    • 谢谢,我实际上是想避免创建多个出口并在类声明中解决它,即在类中获取按钮标题并用它做一些事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多