首页 > 解决方案 > 如何在navigationController swift中设置后按变量?

问题描述

根据这个链接,我想在背压时将一些数据从 B 传递viewController给它的父级 A !viewController这是我的代码:在我的 BviewController中,我添加了此代码-

    extension Bcontroller: UINavigationControllerDelegate {
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {

        (viewController as? Acontroller)?.number = numberInB
        (viewController as? Acontroller)?.myBoolean = boolInB

    }
}

这是我在 A 控制器中的代码:

override func viewWillAppear(_ animated: Bool) {
    if number != -1 {
        print(myBoolean)
    }
}

当我打开B控制器时,navigationController (willShow)被调用,当我按下返回按钮时,viewWillAppear首先被调用,然后navigationController(willShow)在B控制器中被调用!所以我的数据没有设置,并且 number总是-1. 如何设置这些变量?

标签: iosswiftuinavigationcontroller

解决方案


请找到以下步骤来实现委托。

第 1 步:- 在视图控制器 B 中初始化协议。

视图控制器B.m

protocol ViewControllerDelegate
{
    func didUpdateViewController(_ number: NSNumber, myBoolean: Bool);
}

第 2 步:- 在 vi​​ewcontrollerB 中初始化对象

var delegate:ViewControllerDelegate?

第 3 步:- 现在从 back 函数调用这个委托。这里我正在考虑 back 是 pop viewcontroller 的函数。

func Back()
{
    delegate?.didUpdateViewController(numberInB!, myBoolean: boolInB!)
}

第 4 步:- 继承 viewcontrollerA 中的协议。

class ViewControllerA: UIViewController,ViewControllerDelegate

第 5 步:- 现在在 viewcontrollerA 中设置委托。

视图控制器A.m

override func viewDidLoad() {
    super.viewDidLoad()
    let obj = ViewControllerB()//Initialize it as per your code
    obj.delegate = self;
    // Do any additional setup after loading the view, typically from a nib.
}

最后一步:- 覆盖委托方法。

   func didUpdateViewController(_ number: NSNumber, myBoolean: Bool) {
        print(number,myBoolean)
    }

让我知道它是否有效


推荐阅读