视图控制器值传递
View Controller value passing
我有一个 iOS 应用程序,它有 控制器 A,它使用采用 3D 触摸协议的表视图。每个单元格实际上都采用了3D触摸,因此选择单元格时,它将带来模态视图控制器(控制器B)。
此 控制器 B 基本上用于填充信息,然后将这些信息添加到 控制器 A 上的表视图中。
所以在应用 DRY 原则时,我重新使用 Controller B 来添加和编辑数据。
问题:
控制器 B 有一个 属性
var didPresentVia3dTouch : Bool = false
和一个方法:
public func setPreference(editMode: Bool) {
self.didPresentVia3dTouch = editMode
}
所以这个方法应该在Controller A中的tablecell被强制触摸时将didPresentVia3dTouch的值从false设置为true,而不是通过导航项按钮作为一般 'Add' 调用显示。
在 控制器 A 中,我保留了对 控制器 B 的引用,如下所示:
var controllerBref = AddEditViewController()
所以在方法中
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController)
我从 Controller B 调用方法 setPreference 像这样:
controllerBRef.setPreference(true)
为了调用 控制器 B 作为该单元格数据的编辑视图。
我注意到的一个问题是,当我打印 Controller B 的方法 setPreference(editMode: Bool) 的值时,editMode 常量,它会打印出 true,但在 viewWillAppear、viewDidAppear、viewDidLoad 和所有其他方法中,didPresentVia3dTouch 的值仍然为 false,因此不允许我更改导航栏的标题,无论是处于编辑模式还是添加新模式。
这里有什么我遗漏或不理解的地方吗?我试过委派但无法弄清楚。
问题是这一行
var controllerBref = AddEditViewController()
与当前显示的 VC 没有关系,我的意思是它是一个单独的实例,因此当您显示 B 时将其设置为 controllerBref
您需要在将要显示的视图控制器实例上设置 属性,而不是您实例化并存储在 属性 中的某个随机实例。
使用:
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
if let destVC = viewControllerToCommit as? AddEditViewController {
destVC.setPreference(editMode:true)
}
}
我有一个 iOS 应用程序,它有 控制器 A,它使用采用 3D 触摸协议的表视图。每个单元格实际上都采用了3D触摸,因此选择单元格时,它将带来模态视图控制器(控制器B)。
此 控制器 B 基本上用于填充信息,然后将这些信息添加到 控制器 A 上的表视图中。
所以在应用 DRY 原则时,我重新使用 Controller B 来添加和编辑数据。
问题:
控制器 B 有一个 属性
var didPresentVia3dTouch : Bool = false
和一个方法:
public func setPreference(editMode: Bool) {
self.didPresentVia3dTouch = editMode
}
所以这个方法应该在Controller A中的tablecell被强制触摸时将didPresentVia3dTouch的值从false设置为true,而不是通过导航项按钮作为一般 'Add' 调用显示。
在 控制器 A 中,我保留了对 控制器 B 的引用,如下所示:
var controllerBref = AddEditViewController()
所以在方法中
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController)
我从 Controller B 调用方法 setPreference 像这样:
controllerBRef.setPreference(true)
为了调用 控制器 B 作为该单元格数据的编辑视图。
我注意到的一个问题是,当我打印 Controller B 的方法 setPreference(editMode: Bool) 的值时,editMode 常量,它会打印出 true,但在 viewWillAppear、viewDidAppear、viewDidLoad 和所有其他方法中,didPresentVia3dTouch 的值仍然为 false,因此不允许我更改导航栏的标题,无论是处于编辑模式还是添加新模式。
这里有什么我遗漏或不理解的地方吗?我试过委派但无法弄清楚。
问题是这一行
var controllerBref = AddEditViewController()
与当前显示的 VC 没有关系,我的意思是它是一个单独的实例,因此当您显示 B 时将其设置为 controllerBref
您需要在将要显示的视图控制器实例上设置 属性,而不是您实例化并存储在 属性 中的某个随机实例。
使用:
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
if let destVC = viewControllerToCommit as? AddEditViewController {
destVC.setPreference(editMode:true)
}
}