Как программно добавить UIButton в ViewControllers

#ios #swift #uiviewcontroller #uibutton

#iOS #swift #uiviewcontroller #uibutton

Вопрос:

У меня есть два контроллера просмотра, ViewControllerA и ViewControllerB, где ViewControllerB является подклассом ViewControllerA. Вот реализация кода в ViewControllerA.

 class ViewControllerA: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    createButton()
    buttonPressed()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()      
}

func createButton () {
    let button = UIButton();
    button.setTitle("Add", forState: .Normal)
    button.setTitleColor(UIColor.blueColor(), forState: .Normal)
    button.frame = CGRectMake(200, 65, 46, 30) // X, Y, width, height
    button.addTarget(self, action: "buttonPressed:", forControlEvents: .TouchUpInside)
    self.view.addSubview(button)
}

func buttonPressed(sender: UIButton!) {
    var alertView = UIAlertView();
    alertView.addButtonWithTitle("Done");
    alertView.title = "Alert!";
    alertView.message = "Button Pressed!!!";
    alertView.show();
}
 

В моем ViewControllerB я хотел бы использовать createButton(), но не так, как это было использовано в ViewControllerA. Допустим, я хочу иметь красный цвет, а не синий в ViewControllerB в createButton(). Как я могу переопределить createButton(), чтобы он отличался в ViewControllerB?

Комментарии:

1. Переопределив его — override func createButton() . В чем проблема?

2. Одним из вариантов было бы добавить параметр цвета в createButton метод.

3. Мэтт, я понимаю, чтобы переопределить его, как вы заявили. Если я переопределю этот способ, у меня должно быть такое же количество кода в ViewControllerB только для разницы в цвете в методе createButton().

4. вы можете установить параметры имени контроллера в функции createButton(), где вы можете сравнить это имя и задать соответствующий цвет. к имени вашего контроллера.

5. Спасибо всем. Теперь этот вопрос может быть полезен для новых разработчиков iOS с тем же подходом idea.

Ответ №1:

Будет работать следующее.

 class ViewControllerA: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    createButton()
    buttonPressed()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()      
}

func createButton () {
    let button = UIButton();
    button.setTitle("Add", forState: .Normal)
    button.setTitleColor(UIColor.blueColor(), forState: .Normal)
    button.frame = CGRectMake(200, 65, 46, 30) // X, Y, width, height
    button.addTarget(self, action: "buttonPressed:", forControlEvents: .TouchUpInside)
    self.view.addSubview(button)
}

func buttonPressed(sender: UIButton!) {
    var alertView = UIAlertView();
    alertView.addButtonWithTitle("Done");
    alertView.title = "Alert!";
    alertView.message = "Button Pressed!!!";
    alertView.show();
}


class ViewControllerB: ViewControllerA {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()      
}

override func createButton () {
    let button = UIButton();
    button.setTitle("Add", forState: .Normal)
    button.setTitleColor(UIColor.blueColor(), forState: .Normal)
    button.frame = CGRectMake(200, 65, 46, 30) // X, Y, width, height
    button.addTarget(self, action: "buttonPressed:", forControlEvents: .TouchUpInside)
    self.view.addSubview(button)
}

override func buttonPressed(sender: UIButton!) {
    var alertView = UIAlertView();
    alertView.addButtonWithTitle("Done");
    alertView.title = "Alert!";
    alertView.message = "Button Pressed!!!";
    alertView.show();
}
 

Надеюсь, это поможет тем, кто также пытается понять наилучший способ создания подклассов view controller.