自定义UIView使用init(编码器)初始化,如何使用init(frame)初始化它

时间:2017-02-19 01:40:21

标签: ios swift uiview

所以我超越了init(frame)来做一堆事情:

class InputField: UIView {

    override init(frame: CGRect) {
        super.init(frame: frame);
        let label = UILabel(frame: CGRect(x: 8, y: 8, width: 73, height: 30));
        label.text = "I want";
        label.font = UIFont(name: "Avenir-Book", size: 26.0);
        addSubview(label);
        NSLayoutConstraint(item: label, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leadingMargin, multiplier: 1.0, constant: 8.0).isActive = true;

    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder);
    }

}

问题是第二个init()被称为第一个UIView。我在故事板中设置的方式是使用一个简单的空InputField,其类为init(coder)。为什么它使用第二个而不是第一个?

我不想以编程方式创建InputField,因为我更愿意看到我在故事板中设置的视图。我知道如果我被困住了,但我主要想学习如何这样做。

编辑,如评论中所述,当前的解决方法是在init(frame)中执行该配置代码。但这仍然没有回答:为什么要被召唤而不是if(spin($color)){ $wonlast = true; $moneypot += $current_bet; $result_text .= "Winner!<br/>"; }else{ $result_text.= "Loser<br/>"; $wonlast = false; $moneypot -= $current_bet; } if(($result = mysqli_query($con, "UPDATE store_players SET `credits` = $moneypot WHERE `id` = 1") !== null){ echo 'success'; } else { die(mysqli_error($con)); }

1 个答案:

答案 0 :(得分:1)

有不同的便捷方法来帮助初始化视图。当视图实际初始化时,将调用许多方法( -frame,-coder等)中的一个。 如果您需要执行任何自定义初始化,可以使用common init方法。