【发布时间】:2018-05-22 22:19:39
【问题描述】:
我有一个带有 Controller A 的 iOS 应用程序,它使用采用 3D 触摸协议的 tableview。每个单元格实际上都采用此3D触摸,因此在选择单元时,它将带来模态视图控制器(控制器B)。
这个controller B主要是用来填充信息,然后添加到Controller A上的tableview中。
所以在应用 DRY 原则时,我正在重用 Controller B 来添加和编辑数据。
问题:
Controller B有一个属性
var didPresentVia3dTouch : Bool = false
还有一个方法:
public func setPreference(editMode: Bool) {
self.didPresentVia3dTouch = editMode
}
所以当Controller A中的tablecell被强制触摸时,这个方法应该将didPresentVia3dTouch的值从false设置为true,而不是通过导航项呈现按钮作为一般的“添加”调用。
在 Controller A 中,我保留了对 Controller B 的引用,如下所示:
var controllerBref = AddEditViewController()
所以在方法中
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController)
我从 Controller B 调用 setPreference 方法,如下所示:
controllerBRef.setPreference(true)
为了调用 Controller B 来充当该单元格上数据的编辑视图。
我注意到的一个问题是,当我打印 Controller B 的方法 setPreference(editMode: Bool) 的值时,editMode 常量会打印出 true,但在 viewWillAppear、viewDidAppear、viewDidLoad 和所有其他方法中,didPresentVia3dTouch 的值仍然为 false,因此不允许我更改导航栏的标题是否处于编辑模式或添加新模式。
这里有什么我遗漏或不理解的地方吗?我尝试了委托,但无法弄清楚。
【问题讨论】:
-
我要做的就是使用两个不同的视图控制器类。我认为您对 DRY 的使用在这里放错了地方。一个视图控制器可以是另一个视图控制器的子类,除了一个用于 3D“窥视”上下文。
标签: ios swift delegates viewcontroller