Ios 如何在navigationController swift中设置背压变量?
根据,我想将一些数据从一个BIos 如何在navigationController swift中设置背压变量?,ios,swift,uinavigationcontroller,Ios,Swift,Uinavigationcontroller,根据,我想将一些数据从一个BviewController传递到它的父级,即一个viewController,然后按back press!这是我的密码: 在我的BviewController中,我添加了以下代码- extension Bcontroller: UINavigationControllerDelegate { func navigationController(_ navigationController: UINavigationController, willSh
viewController
传递到它的父级,即一个viewController
,然后按back press!这是我的密码:
在我的BviewController
中,我添加了以下代码-
extension Bcontroller: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
(viewController as? Acontroller)?.number = numberInB
(viewController as? Acontroller)?.myBoolean = boolInB
}
}
这是我在控制器中的代码:
override func viewWillAppear(_ animated: Bool) {
if number != -1 {
print(myBoolean)
}
}
当我打开B控制器时,会调用
navigationController(willShow)
,当我按下后退按钮时,会首先调用ViewWillDisplay
,然后调用B控制器中的navigationController(willShow)
!因此,我的数据未设置,number
将始终为-1
。如何设置这些变量?在控制器B的视图中调用它:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
let navigationController: UINavigationController = self.navigationController!
let controllers: [Acontroller] = navigationController.viewControllers.filter({ $0 is Acontroller }) as! [Acontroller]
if let viewController: Acontroller = controllers.first {
viewController.number = numberInB
viewController.myBoolean = boolInB
}
}
如果控制器在堆栈中,将为其分配值。在控制器B的视图中调用它:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
let navigationController: UINavigationController = self.navigationController!
let controllers: [Acontroller] = navigationController.viewControllers.filter({ $0 is Acontroller }) as! [Acontroller]
if let viewController: Acontroller = controllers.first {
viewController.number = numberInB
viewController.myBoolean = boolInB
}
}
如果控制器在堆栈中,将为其分配值。如果是小数据,则使用
UserDefaults
:
这是存储数据的方式:
UserDefaults.standard.set(1, forKey: "Key")
UserDefaults.standard.integer(forKey: "Key")
这就是你找回它的方式:
UserDefaults.standard.set(1, forKey: "Key")
UserDefaults.standard.integer(forKey: "Key")
也可以将结构与静态变量一起使用:
struct ShareValue {
static var UserNum: Int = 0
}
如果是小数据,则使用
UserDefaults
:
这是存储数据的方式:
UserDefaults.standard.set(1, forKey: "Key")
UserDefaults.standard.integer(forKey: "Key")
这就是你找回它的方式:
UserDefaults.standard.set(1, forKey: "Key")
UserDefaults.standard.integer(forKey: "Key")
也可以将结构与静态变量一起使用:
struct ShareValue {
static var UserNum: Int = 0
}
请查找以下步骤以实现委派 步骤1:-在视图控制器B中初始化协议 ViewcontrollerB.m
protocol ViewControllerDelegate
{
func didUpdateViewController(_ number: NSNumber, myBoolean: Bool);
}
第2步:-
初始化viewcontrollerB内的对象
var delegate:ViewControllerDelegate?
第3步:-
现在从back调用这个委托函数。这里我考虑的是back是弹出viewcontroller的函数
func Back()
{
delegate?.didUpdateViewController(numberInB!, myBoolean: boolInB!)
}
第4步:-
在viewcontrollerA中继承协议
class ViewControllerA: UIViewController,ViewControllerDelegate
第5步:-
现在在viewcontrollerA中设置代理
class ViewControllerA: UIViewController,ViewControllerDelegate
ViewcontrollerA.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)
}
让我知道它是否有效请查找以下步骤以实现委派 步骤1:-在视图控制器B中初始化协议 ViewcontrollerB.m
protocol ViewControllerDelegate
{
func didUpdateViewController(_ number: NSNumber, myBoolean: Bool);
}
第2步:-
初始化viewcontrollerB内的对象
var delegate:ViewControllerDelegate?
第3步:-
现在从back调用这个委托函数。这里我考虑的是back是弹出viewcontroller的函数
func Back()
{
delegate?.didUpdateViewController(numberInB!, myBoolean: boolInB!)
}
第4步:-
在viewcontrollerA中继承协议
class ViewControllerA: UIViewController,ViewControllerDelegate
第5步:-
现在在viewcontrollerA中设置代理
class ViewControllerA: UIViewController,ViewControllerDelegate
ViewcontrollerA.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)
}
让我知道它是否有效创建一个委托,当
从父视图控制器移动时,其他视图控制器可以实现该委托并调用视图中的委托方法将消失
public protocol YourViewControllerDelegate: class {
func didGoBack(viewController: YourViewController)
}
public class YourViewController: UIViewController {
public weak var delegate: YourViewControllerDelegate?
public override func viewWillDisappear(_ animated: Bool) {
if isMovingFromParentViewController {
delegate?.didGoBack(viewController: self)
}
}
}
在其他视图控制器中:
extension YourOtherViewController: YourViewControllerDelegate {
public func didGoBack(viewController: YourViewController) {
// Do something e.g. set your variables
}
}
创建一个委托,当从父视图控制器移动时,其他视图控制器可以实现并调用视图中的委托方法将消失
public protocol YourViewControllerDelegate: class {
func didGoBack(viewController: YourViewController)
}
public class YourViewController: UIViewController {
public weak var delegate: YourViewControllerDelegate?
public override func viewWillDisappear(_ animated: Bool) {
if isMovingFromParentViewController {
delegate?.didGoBack(viewController: self)
}
}
}
在其他视图控制器中:
extension YourOtherViewController: YourViewControllerDelegate {
public func didGoBack(viewController: YourViewController) {
// Do something e.g. set your variables
}
}
使用delagation是实现这一目标的最佳方法。参见此,例如@ketakiDamale,你能给我写一个例子吗?@Anbu.karthik我正是使用了这个问题,并检查了答案!但是它不起作用,也许我实现了错误:(@AzinNilchi使用UserDefaults
?使用delagation实现它的最佳方法是什么?请看下面的例子@ketakiDamale你能给我写个例子吗?@Anbu.karthik我使用了这个问题,答案已经检查过了!但是它不起作用,也许我实现了错误:(@AzinNilchi使用UserDefaults
怎么样?我使用了你的答案,它对我的工作非常有效!谢谢你我使用了你的答案,它对我的工作非常有效!谢谢你