【发布时间】:2021-03-02 20:24:37
【问题描述】:
您好,当委托在另一个视图控制器中调用时,我在运行函数时遇到了一些问题。我有两个视图控制器。目标是,当其中一个视图控制器关闭时,它会调用一个函数。
这是第一个视图控制器的代码。调试领事中的“A”和“B”打印。
protocol UpdateApproachProtocol {
func addApproachToEntry()
}
class ApproachViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
var delegate: UpdateApproachProtocol?
override func viewDidLoad() {
super.viewDidLoad()
title = "Add an Approach"
tableView.delegate = self
tableView.dataSource = self
safeArea = view.layoutMarginsGuide
setupView()
}
override func viewDidDisappear(_ animated: Bool) {
LoadData.shared.approachArray.append(newApproach)
print("A")
delegate?.addApproachToEntry()
print("B")
}
}
这是另一个视图控制器的代码……“测试”永远不会被打印出来。我错过了什么?
class AddEntryViewController: KeyboardViewController, SendTailToEntryProtocol {
override func viewDidLoad() {
super.viewDidLoad()
let approachVC = ApproachViewController()
approachVC.delegate = self
}
extension AddEntryViewController: UpdateApproachProtocol {
func addApproachToEntry() {
print("test")
}
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.section == 5 && indexPath.row == 0 {
self.navigationController?.showDetailViewController(ApproachViewController(), sender: nil)
}
}
}
【问题讨论】:
-
Om
viewDidLoad在您的第二个代码示例中,您创建了一个ApproachViewController,然后从不对其进行任何操作——它立即超出了范围。您是否想向我们展示一些代码?或者这实际上不是正在显示的ApproachViewController实例? -
您能否详细说明
ApproachViewController超出范围的情况?我称之为这个的唯一原因是将委托设置为等于视图控制器。缺少一些代码,主要是为我的 UIPickerView 格式化。 -
是的——你创建了视图控制器,然后你什么也不用做。它永远不会出现在屏幕上。您在其上设置了委托,但这无关紧要,因为用户从不与视图控制器的 该实例 进行交互。我假设您已经在其他地方展示了该视图控制器(您没有向我们展示该代码)并且您真正想要的是将实际显示给用户的实例设置为委托。但是,同样,您没有显示足够的代码来说明应该如何发生。
-
不要在 cmets 中发布代码(这真的很难阅读),请编辑您的原始问题。显示
ApproachViewController的创建位置和AddEntryViewController的创建位置 -
已更新。在
AddEntryViewController上,您可以看到ApproachViewController何时出现在屏幕上。以及如何关闭并带回AddEntryViewController
标签: ios swift function delegates protocols