【发布时间】:2020-10-13 13:41:59
【问题描述】:
我正在申请初级开发人员职位,我有一个非常具体的任务,我已经花了 3 天时间完成。听起来很简单 - 将数据传递给 rootViewController。 这就是我所做的:
1)
private func userDefaultsToRootController() {
let input = textField.text!
defaults.set(input, forKey: "SavedLabel")
navigationController?.popViewController(animated: true)
}
-
私有函数 segueToRootViewController() { 让destinationVC = MainScreen1() 让 input = textField.text!
if input == "" { self.navigationController?.popToRootViewController(animated: true) } destinationVC.input = input navigationController?.pushViewController(destinationVC, animated: true)}
private func popToNavigationController() {
let input = textField.text!
if let rootVC = navigationController?.viewControllers.first as? MainScreen1 {
rootVC.input = input
}
navigationController?.popToRootViewController(animated: true)
}
- 我用过CoreData
但这是困难的部分 - 我收到一封电子邮件,所有这些方法都不够好,我需要使用委托和闭包。我以前做过委托和闭包,但是当我 popToRootViewController 委托方法通过 nil 时。您能否至少指出在哪里可以找到有关这方面的信息?
** 已添加 **
有 2 个视图控制器:初始和第二个。 这就是我在初始视图控制器中的内容:
var secondVC = MainScreen2()
override func viewDidLoad() {
super.viewDidLoad()
secondVC.delegate = self
}
这就是我推动 SecondViewController 的方式
@objc private func buttonTapped(_ sender: CustomButton) {
let nextViewController = MainScreen2()
navigationController?.pushViewController(nextViewController, animated: true)
}
在 SecondViewController 我有这个协议
protocol PassData {
func transferData(text: String)
}
也是一个代表:
var delegate: PassData?
这就是我返回初始视图控制器的方式
@objc private func buttonTapped(_ sender: CustomButton) {
if let input = textField.text {
print(input)
self.delegate?.transferData(text: input)
self.navigationController?.popToRootViewController(animated: true)
}
}
回到我实现委托方法的初始视图控制器
extension MainScreen1: PassData {
func transferData(text: String) {
print("delegate called")
label.text = text
}
}
没有调用代理。
【问题讨论】:
-
您是否添加了一个断点来检查您的委托方法是否在您的初始视图控制器中被调用?您是否在初始视图控制器中将委托设置为 self?
-
我在初始视图控制器中将委托设置为 self,但它没有被调用
-
设置委托的地方不对。您必须在
buttonTapped函数中设置它,而不是在viewDidLoad中。那不是您要压入堆栈的实例
标签: ios swift uinavigationcontroller pass-data poptoviewcontroller