为什么我的变量在printLn中更改,而在tableview Swift中没有

时间:2015-05-06 11:46:38

标签: ios uitableview swift segue

我花了很多年时间试图解决这个问题但没有决心。

当我解开segue时,我终于找到了从一个控制器中提取数据并将其移动到目标控制器的点,但是,当变量仅在println中重新加载时但不在桌面视图中。

我会尝试用我的代码更好地解释这一点,因为它看起来很复杂。

我在一个控制器上有一个标签,按下时会以模态方式显示UISearchController。当您选择一个单元格时,它会解除带有展开segue的视图,并将数据从单元格传递回前一个控制器以更改按钮的标签。

我将label.text设置在初始控制器顶部的变量中,就像这样    var selectedStation = "Search Stations"

这是我的伪劣命名函数,用于println变量以查看它是否有效:

func updateStuff() {
    println("you selected \(selectedStation)")
    tableView.reloadData()
}

我在我的cellForRowAtIndexPath中声明了标签文字,如下所示:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("searchFieldCell", forIndexPath: indexPath) as! searchFieldTableViewCell
        cell.backgroundView = UIImageView(image: UIImage(named: "red-full"))
        cell.destinationLabel.text = selectedStation
}

然后在我的UISearchController我有以下内容将该变量传回

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
    println(stationArray[indexPath.row])
    selectedStation = stationArray[indexPath.row]
    self.performSegueWithIdentifier("unwindToSet", sender: self)

}

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.destinationViewController .isKindOfClass(SetAlertController) {
        var VC = segue.destinationViewController as! SetAlertController
        VC.selectedStation = self.selectedStation
        VC.updateStuff()
    }
}

基本上我的控制器检索更新的变量,但是没有在tableview中更新它,它只在println中更新它。

1 个答案:

答案 0 :(得分:0)

我使用以下viewcontrollers设置了一个快速演示项目:

class MainViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    @IBAction func unwind(segue: UIStoryboardSegue) {
        println("unwinding")

        if let sourceViewController = segue.sourceViewController as? ModalViewController {
            label.text = sourceViewController.selectedText
        }
    }
}

点击标签会导致modalviewcontroller显示。我在故事板中设置了这个。

class ModalViewController: UITableViewController {
    var selectedText: String?

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        let cell = tableView.cellForRowAtIndexPath(indexPath)!
        selectedText = cell.textLabel?.text
        performSegueWithIdentifier("unwindToSet", sender: self)
    }
}

一切都按预期工作!随便问一下有什么不清楚的地方...... 你可以在这里找到演示项目:https://www.dropbox.com/sh/u2blzmo3ztaaini/AADq8hOMMS71wvBH1eH4Bz_4a?dl=0