我创建了一个UIViewController。在这个视图控制器中,我有一个容器视图。
在代码中我像这样实例化容器视图:
var answerButtons: AnswerButtonsViewController!
override func viewDidLoad() {
super.viewDidLoad()
answerButtons = AnswerButtonsViewController()
answerButtons.delegate = self
println(answerButtons.name) // This prints out the correct string
println(answerButtons.answerOne) // This prints out nil
println(answerButtons.buttons) // This prints out an empty array
retrieveSelectedCategory(selectedCategory!)
}
然而,容器视图肯定是实例化的,因为在容器视图类中我设置了UIButton的背景颜色,这在我的应用程序中正确显示。
以下是我的容器视图中的代码:
@IBOutlet var answerOne: UIButton!
@IBOutlet var answerTwo: UIButton!
@IBOutlet var answerThree: UIButton!
@IBOutlet var answerFour: UIButton!
@IBOutlet var answerFive: UIButton!
@IBOutlet var answerSix: UIButton!
@IBOutlet var answerSeven: UIButton!
@IBOutlet var answerEight: UIButton!
var buttons: Array<UIButton> = []
var name = "Is this set"
var delegate: AnswerButtonsViewControllerDelegate?
override func viewWillAppear(animated: Bool) {
addAnswerButtonsToArray()
buttons.map(customiseButtons)
}
func addAnswerButtonsToArray() {
buttons.append(answerOne)
buttons.append(answerTwo)
buttons.append(answerThree)
buttons.append(answerFour)
buttons.append(answerFive)
buttons.append(answerSix)
buttons.append(answerSeven)
buttons.append(answerEight)
}
func customiseButtons(button: UIButton) {
button.layer.cornerRadius = 5
button.setTitleColor(UIColor.blackColor(), forState: .Normal)
button.backgroundColor = GSNColor.veryLightGrayColor()
var title: String! = button.titleLabel?.text
title.replaceRange(title.startIndex...title.startIndex, with: String(title[title.startIndex]).capitalizedString)
button.titleLabel?.text = title
}
@IBAction func answerButtonPressed(sender: UIButton) {
delegate?.answerButtonPressed(sender)
}
按钮的IBAction也可以工作。
所以我无法理解为什么我的属性answerButtons被启动并且name属性设置为ok。但是,打印时数组为零,数组为空。然而,视图正确显示。
如果您需要更多详细信息,请与我们联系。
修改
以下是连接故事板的图片:
答案 0 :(得分:2)
嵌入在容器视图中的控制器在具有容器视图的控制器的同时被实例化。你不应该自己实例化它。您只需要获得它的引用。容器视图中的控制器是控制器的子视图控制器,其子视图是容器视图。而不是这个,
answerButtons = AnswerButtonsViewController() // this creates another instance that you never use, and is never on screen
你应该有这个,
answerButtons = self.childViewControllers[0] as AnswerButtonsViewController
答案 1 :(得分:1)
在这里,您只是实例化视图控制器。您只能获得对它的引用。您必须使用storyboard实例化视图控制器
ALTER TABLE MailSent ADD CONSTRAINT fk_profile_sender_id FOREIGN KEY (profil_sender_id) REFERENCES TABLE-NAME(id);
ALTER TABLE MailSent ADD CONSTRAINT fk_profil_receiver_id FOREIGN KEY (profil_receiver_id) REFERENCES TABLE-NAME(id);
答案 2 :(得分:0)
在加载视图之前,IBOutlet将为零。您所做的只是实例化容器视图控制器,而不是显示或加载视图。
在调用AnswerViewController的loadView
和viewDidLoad
方法之前,IBOutlet将无法使用。
您可以查看:
if (answerButtons.isViewLoaded()) {
}
查看视图是否已加载。如果要加载视图,则需要访问控制器的视图属性,或者将视图作为子视图添加到视图层次结构中。