在另一个 UIViewController 中更新 UITableView,而无需在 Swift 中使用 segue



我对XCode比较陌生,我有一个问题。在我的UITableViewController中,我有一个带有技巧列表的数组。

var trickListArray = [tricktionaryViewController.trick(category: "", name: "", turn: "", degree: 0, description: "", instruction: "")]
    var learningListArray = [tricktionaryViewController.trick(category: "", name: "", turn: "", degree: 0, description: "", instruction: "")]
    var myTricksArray:[[tricktionaryViewController.trick]] {
        return [trickListArray,learningListArray]
    }

我想通过"添加到技巧列表"UIButton将类"trick"的对象从另一个ViewController附加到这个数组。按下此按钮后,会出现一个弹出窗口,显示"已成功添加",但我不想转到我的 UITableViewController,而只需将技巧对象附加到我的 trickListArray 或 learningListArray 中,然后像这样更新我的 UITableView:

@IBAction func addToTrickList(sender: AnyObject) {
        var destinationViewController: myTricksViewController = myTricksViewController(nibName: nil, bundle: nil)
        destinationViewController.trickListArray.append(self.activeTrick)
        var popUpTextString: String = "Successfully added " + String(activeTrick.name) + " to the list"
        self.popViewController.showInView(self.view, animated: true, text: popUpTextString)
    }

如果我在 IBAction 中添加一个reloadData()函数,如下所示:

@IBAction func addToTrickList(sender: AnyObject) {
        var destinationViewController: myTricksViewController = myTricksViewController(nibName: nil, bundle: nil)
        destinationViewController.trickListArray.append(self.activeTrick)
        destinationViewController.myTricksTableView?.reloadData()
        var popUpTextString: String = "Successfully added " + String(activeTrick.name) + " to the list"
        self.popViewController.showInView(self.view, animated: true, text: popUpTextString)
    }

它不会更新 UITableView。我还没有测试数组是否真的更新了,但它应该是。

任何帮助不胜感激!

你需要应用一些弧形!视图控制器不应控制数据源。相反,将数据数组放在一个单一实例中,你可以从应用中的任何位置向该列表添加/删除对象。

以下是 obj-c 中的体系结构指南:http://www.galloway.me.uk/tutorials/singleton-classes/

下面是如何在 swift 中执行单例类的示例:用于共享数据的单例类

编辑:

如果您想要一种快速简便的方法,则可以将应用委托用作单例。

将数据数组作为属性放在应用程序委托中,并通过以下方式将实例获取到您的应用程序委托:

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let yourlist = appDelegate.listOfObjects

最新更新