根据this link,我希望将B viewController
中的一些数据传递给其父级A viewController
,然后再按下!这是我的代码:
在我的B viewController
中,我添加了此代码 -
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
,然后调用B控制器中的navigationController(willShow)
!所以我的数据未设置,number
将始终为-1
。我该如何设置这些变量?
答案 0 :(得分:1)
在控制器B的viewWillDisappear中调用它:
List<PersonWrapper> wrapperList = new ArrayList<>();
jrList.stream()
.flatMap(jr -> seniorList.stream()
.filter(sr -> jr.getName().equals(sr.getName()))
.map(sr -> new PersonWrapper(jr, sr))
)
.forEach(wrapperList::add);
如果控制器处于堆叠状态,则会为其分配值。
答案 1 :(得分:1)
如果是小数据,请使用UserDefaults
:
这是您存储数据的方式:
UserDefaults.standard.set(1, forKey: "Key")
这就是你得到它的方式:
UserDefaults.standard.integer(forKey: "Key")
或者你可以使用带有静态变量的结构:
struct ShareValue {
static var UserNum: Int = 0
}
答案 2 :(得分:1)
请找到以下步骤来实施代表。
第1步: - 在视图控制器B中初始化协议。
ViewcontrollerB.m
protocol ViewControllerDelegate
{
func didUpdateViewController(_ number: NSNumber, myBoolean: Bool);
}
第2步: - viewcontrollerB里面的initalise对象
var delegate:ViewControllerDelegate?
第3步: - 现在从后面的函数调用这个委托。我正在考虑回来是弹出viewcontroller的函数。
func Back()
{
delegate?.didUpdateViewController(numberInB!, myBoolean: boolInB!)
}
第4步: - 在viewcontrollerA中继承协议。
class ViewControllerA: UIViewController,ViewControllerDelegate
第5步: - 现在在viewcontrollerA中设置委托。
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)
}
让我知道它是否有效
答案 3 :(得分:1)
创建一个其他视图控制器可以实现的委托,并在viewWillDisappear
为isMovingFromParentViewController
true
中调用委托方法
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
}
}