简短版本为:
在模式演示和解雇另一个VC期间,VC变量的值是否保持一致?当第二个VC被解雇时,原始VC的变量是否仍然等于它们的最后值?
详细信息,如果需要
我有一个viewController,其中选择了一个表格单元格。然后将该单元格的内容拉出并传递给编辑器viewController,如下所示:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
//Segue to mainVC editor, for editing action
if (segue.identifier == "modalToEditor") && passingEdit == true {
//Assign selection to a variable 'currentCell'
let indexPath = tableView.indexPathForSelectedRow;
let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as! CustomTableViewCell;
//Set cell text into variables to pass to editor
let cellNameForEdit = currentCell.nameLabel!.text
let cellDescForEdit = currentCell.descLabel.text
//Pass values to EditorView
let editorVC = segue.destinationViewController as! EditorView;
editorVC.namePassed = cellNameForEdit
editorVC.descPassed = cellDescForEdit
editorVC.indexOfTap = indexPath
editorVC.currentListEntity = currentListEntity
现在,在第二个/编辑器viewController中,用户可以点击要求移动单元格的按钮。 "移动屏幕"是一个不同的/第三个VC。我想知道的是,我可以解雇编辑器并期望原始VC记住最后选择的单元格吗?
附加编辑以显示cellForRowAtIndexPath
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//Setup variables
let cellIdentifier = "BasicCell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! CustomTableViewCell
//Make sure the row heights adjust properly
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 80.0
//Create normal cells except when last cell
if indexPath.row < taskList_Cntxt.count {
let task = taskList_Cntxt[indexPath.row]
//Create table cell with values from Core Data attribute lists
cell.nameLabel!.text = task.valueForKey("name") as? String
cell.descLabel!.text = task.valueForKey("desc") as? String
//Related to running TaskActions: Empty block function passed from custom cell VC
cell.doWork = {
() -> Void in
self.doStuff(cell)
}
}
答案 0 :(得分:1)
是。视图控制器只是对象,因为只有在执行更改它们的代码时才更改它们的属性。在您的特定情况下,VC将其表视图保持为属性(并且强烈地作为其视图的子视图),并且表视图保留所选索引路径的数组。但是要小心,UITableViewController
的子类可以在viewWillAppear(see here)上默认清除选择。
另请注意,您已经选择了大多数人认为在editorVC
中初始化prepareForSegue
的奇怪方法。获取选定的索引路径很好,但随后获取单元格(视图),然后配置该单元格,然后从单元格的子视图中获取数据源值非常迂回。
查看let task = taskList_Cntxt[indexPath.row]
方法中的cellForRowAtIndexPath
行?这就是您在给定indexPath
访问数据源数组中的对象的方法。该对象(您称之为task
)应该传递给下游视图控制器。
答案 1 :(得分:1)
乍一看你的应用程序有奇怪的用户体验:)
回答你的问题:
1)从你的描述看来,第一个视图控制器似乎仍在执行,因此它的所有属性都保存在内存中,因此你可以在属性中存储选定的indexPath
2)您可以使用选定的indexPath配置第三个视图控制器,在解除之前从第二个开始,或者在第二个vc被关闭后从第一个开始配置,具体取决于您的导航
3)为此目的,全局变量是不好的做法