ios - 如何在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
. 如何设置这些变量?
解决方案
请找到以下步骤来实现委托。
第 1 步:- 在视图控制器 B 中初始化协议。
视图控制器B.m
protocol ViewControllerDelegate
{
func didUpdateViewController(_ number: NSNumber, myBoolean: Bool);
}
第 2 步:- 在 viewcontrollerB 中初始化对象
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)
}
让我知道它是否有效
推荐阅读
- http - 了解 OData 服务
- blockchain - 如何使用 web3 处理 Solidity uint 数组
- javascript - 如何在不调整reactjs中的背景图像大小的情况下进行缩放
- java - 在 openxmlformats 中更改图表的轴颜色和字体
- rx-java - RxJava Scheduler.Worker schedule 订阅 Observable 的操作
- android - 带有 2 个 Fragment 屏幕的 Google play 游戏服务
- php - 当我打电话给她 7.0 时,我的函数的参数很少
- python - Python动态创建xml文件
- python - 如何细分熊猫数据框
- windows - 如何将 %userprofile% 放入 puppet exec