#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.