【发布时间】:2016-02-29 04:50:52
【问题描述】:
这快把我逼疯了。正在调用函数updateTextView(),由打印语句验证,但它没有在我的视图控制器中设置标签,并且标签的打印语句返回 nil,即使它设置了默认值,当应用程序已加载。更令人困惑的是,我设置了一个测试按钮来单独调用这个函数,当我用test()调用它时,标签会正确更新。
class GoalDetailViewController: UIViewController, TextDelegate {
@IBAction func test(sender: AnyObject) {
updateTextView()
}
func updateTextView() {
print(goalSummaryTextBox?.text)
print("delegate called")
self.goalSummaryTextBox?.text = GoalsData.summaryText
print(goalSummaryTextBox?.text)
}
@IBOutlet weak var goalTitle: UILabel?
@IBOutlet weak var goalCreationDate: UILabel?
@IBOutlet weak var goalSummaryTextBox: UITextView?
override func viewDidLoad() {
super.viewDidLoad()
goalSummaryTextBox?.text = GoalsData.summaryText
}
}
updateTextView() 在弹出不同的视图控制器后通过委托方法被调用,如下所示:
class TextEditViewController: UIViewController {
var textDelegate: TextDelegate?
@IBOutlet weak var textView: UITextView?
func configureView() {
navigationItem.title = "Edit Description"
navigationItem.setRightBarButtonItem((UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: "segue")), animated: true)
}
func segue() {
textDelegate = GoalDetailViewController()
if let text = textView?.text {
GoalsData.summaryText = text
}
textDelegate?.updateTextView()
self.navigationController?.popViewControllerAnimated(true)
}
}
【问题讨论】:
-
最后一句话可能是问题所在。
-
你能详细说明一下吗?由于打印语句,我知道它调用函数。
-
您能否发布与弹出的不同视图控制器相关的代码(并触发
updateTextView()调用)?可能是在后台队列上调用了updateTextView()。您是否也可以将print(GoalsData.summaryText)添加到updateTextView()以确保它确实不同? -
@Mark ` func segue() { textDelegate = GoalDetailViewController() if let text = textView?.text {GoalsData.summaryText = text } textDelegate?.updateTextView() self.navigationController?.popViewControllerAnimated(true ) } summaryText 确实打印了正确的值。我尝试将分派中的标签更新移动到主队列的东西,但它没有影响结果
-
您是否有理由不在 IBOutlets 中使用隐式展开的选项?
标签: swift label viewcontroller