没有 performSegue 的委托不会被调用 Swift 5
Posted
技术标签:
【中文标题】没有 performSegue 的委托不会被调用 Swift 5【英文标题】:Delegate without performSegue not getting called Swift 5 【发布时间】:2020-02-04 12:49:57 【问题描述】:我的协议(其中“VehicleRegVCs”是枚举):
protocol VehicleRegVCDelegate: class
func presentedVC(_ currentVC: VehicleRegVCs)
我的买家类:
class BuyerOwnerInfoViewController: UIViewController
weak var delegate: VehicleRegVCDelegate?
override func viewDidLoad()
super.viewDidLoad()
delegate?.presentedVC(.buyerOwnerInfo)
我的主类(未调用底部的委托函数“func presentVC”):
class VehicleRegContainerViewController: ICTViewController
override func viewDidLoad()
super.viewDidLoad()
setupView()
func setupView()
let buyerVC = getBuyerOwnerInfoVC()
buyerVC.delegate = self
extension VehicleRegContainerViewController: VehicleRegVCDelegate
func presentedVC(_ currentVC: VehicleRegVCs)
我希望“presentedVC”被调用...我也做了一个委托...
在 UIViewController 扩展中我已经实现了这个功能......
func getBuyerOwnerInfoVC() -> BuyerOwnerInfoViewController
let vc = UIStoryboard.exciseAndTaxation.instantiateViewController(withIdentifier: "BuyerOwnerInfoViewController") as! BuyerOwnerInfoViewController
return vc
【问题讨论】:
您能否展示一下getBuyerOwnerInfoVC
是如何实现的以及您如何以及在何处展示BuyerOwnerInfoViewController
?
func getBuyerOwnerInfoVC() -> BuyerOwnerInfoViewController let vc = UIStoryboard.exciseAndTaxation.instantiateViewController(withIdentifier: "BuyerOwnerInfoViewController") as! BuyerOwnerInfoViewController return vc
BuyerOwnerInfoViewController 已成功呈现,因为正在调用 viewDidLoad...
您应该edit 您的问题包含该信息。
实际上BuyerOwnerInfoViewController 是在容器视图中...
@JawadAli 您正在创建一个新的 VC 实例并为其分配委托。那是行不通的。您应该使用 prepareForSegue
将其分配给您的嵌入式控制器
【参考方案1】:
containerView 中的 ViewController 使用 segue 连接。您可以使用 prepareForSegue 方法获取控制器并将委托分配给它。
注意:转到故事板并单击连接容器视图和视图控制器的 segue,并为其分配一个标识符。在下面的示例中,我使用了“yourSegueIdentifier”,将其替换为您的标识符。
class VehicleRegContainerViewController: ICTViewController
override func viewDidLoad()
super.viewDidLoad()
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if let buyerVC = segue.destination as? BuyerOwnerInfoViewController
buyerVC.delegate = self
else
print("Error in segue")
【讨论】:
我做了同样的事情,但是 (segue.identifier == "yourSegueIdentifier") 是假的...虽然我给了相同的 segue 名称... (buyerVC = segue.destination as?BuyerOwnerInfoViewController) = true它打印“segue 中的错误” 我明白了......你是对的,在“BuyerOwnerInfoViewController”之前有导航控制器......我的下一个问题是......我怎样才能获得“BuyerOwnerInfoViewController”旁边的VC参考“......并且在“BuyerOwnerInfoViewController”旁边有一系列 5 VC......在其他地方,我通过通知实现了这个......但现在我正在尝试通过代表实现当前呈现的 VC...... @JawadAli 作为一个单独的问题提出并在那里详细解释。如果有帮助,请接受这个。以上是关于没有 performSegue 的委托不会被调用 Swift 5的主要内容,如果未能解决你的问题,请参考以下文章
UITextView 委托 shouldChangeTextInRange (或任何以上)不会被调用
performSegue 并不总是转换,但 prepare(for:sender) 总是被调用