我是 Swift 和 iOS 开发的新手,我想看看是否有更好的方法来完成以下任务:
在我的应用程序中,我有一个表,它存储为[someObject]并由tableViewController管理。 我在tableViewController中编写了管理表的所有逻辑(添加对象,删除对象等)。 但是,表视图本身只能从表中删除对象。 我想以编程方式从应用程序的不同部分添加密钥。 这样做的问题是从tableViewController外部访问表示表的数组。
我想到的最佳解决方案是使数组成为静态数组,以便我可以在没有 tableViewController 实例的情况下修改它(当需要将对象添加到表中时,tableViewController 不会在导航堆栈上)。
我也不想转到表视图控制器。 添加到表中应该在幕后进行。
就像我说的,我是 Swift 和 iOS 开发的新手,所以我想看看是否有更好的方法来实现这一目标。 如果没有必要,我宁愿不使用静态。
你不应该使用静态数组,但你不应该有多个类来管理同一个对象。 您的数组应由管理器类管理,并且该管理器可由多个类访问。您的 tableViewController 不应能够删除对象,但应调用将执行这些更改的管理器
你正在尝试做比你必须做的更多的事情。Apple构建了UITableViewControllers,内置了许多您正在寻找的功能。
首先在情节提要中,向单元格添加一个标签,标签为 123。然后是另一个具有空数组的视图控制器,该数组与 tableViewController 中的数组兼容。
在每个视图控制器的身份检查器中,确保添加文件名并按回车键。
还可以通过在 main.storyboard 中查看 tableViewCell 的属性来设置重用标识符,在"标识符"字段中输入"cell"(无引号)。
从 tableViewController1 开始显示您的数组(我假设它是预加载的。您没有提到其他内容)使用数据源方法
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return yourObjects.list.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let label = cell.viewWithTag(123) as? UILabel
label?.text = yourObjects.list[indexPath.row]
return cell
}
如果您不打算使用 segue,我强烈建议使用导航控制器。它们是"iOS体验"的重要组成部分,使您尝试完成的任务变得更加容易。有很多方法可以做到这一点,但这是一个相当简单的方法。 在委托方法中
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let yourNextVC = storyboard?.instantiateViewController(withIdentifier: "nextVC") as! TheNextVC
navigationController?.pushViewController(yourNextVC, animated: true)
yourNextVC.arrayName = yourObjects.list[indexPath.row]
tableView.deselectRow(at: indexPath, animated: false)
}
最后一种方法是将数组从此表传递到下一个 viewController 的位置,您可以在其中编辑它或执行任何您想要的操作。