(Swift)ViewController的UI元素无法通过实现的委托方法进行编辑

时间:2015-07-06 20:41:13

标签: ios xcode swift uiviewcontroller uisplitviewcontroller

每当我在MasterViewController中选择tableRow时,我想更新DetailViewController中的标签。为实现这一目标,我设计了一个代表,我在MasterVC中有一个代表

protocol TestTableViewControllerDelegate {
func selectedRow(selectedCar : Car)
}

class TestTableViewController: UITableViewController {
...
var delegate : TestTableViewControllerDelegate?

    override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = DetailViewController()

委托工作正常,(它在DetailVC中正确实现),它可以将值从TestTableVC传递给DetailVC,也可以正确地执行println(),每次选择时都会向控制台输出一个新的Car.model字符串TTVC中的一排。 DetailVC看起来像这样(缩短):

class DetailViewController: UIViewController, TestTableViewControllerDelegate {

@IBOutlet var textLabel: UILabel!

var theCar : Car? {
    didSet(newCar) {
        refreshUI()
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    refreshUI()
}

func selectedRow(selectedCar : Car) {
    theCar = selectedCar
    refreshUI()
}

func refreshUI() {
    textLabel?.text = theCar!.model
}

}

我可以与我的委托实现任何类型的操作,期望刷新UI。我尝试了很多方法,这是我最近的尝试。在此之前,我尝试直接在委托方法中设置textLabel的文本属性,但是没有用。使用UI元素时,只会出现此问题。我知道它与尚未加载的视图有关,但为什么我的refreshUI()函数根本不起作用? 我仍然是初学者,所以任何提示或帮助都会非常感激!

1 个答案:

答案 0 :(得分:0)

我使用过的解决方法是在委托中正确地进行操作并将值传递给它而不是UI元素。加载视图时,我使用delegates属性的值正确更新标签的文本。我认为这是一个更好的方法(我是编程新手),但这是我迄今为止提出的最好的灵魂。将尽快更新示例代码。