gpt4 book ai didi

ios - viewWillAppear 触摸屏后调用

转载 作者:行者123 更新时间:2023-11-30 11:40:09 33 4
gpt4 key购买 nike

当 B ->present ->C 时,它自动调用 viewWillAppear,但是当我从 C 解除到 B 并再次 B ->present ->C 时,viewWillAppear 在我触摸屏幕后调用,这是

1.B -> 现在 -> C,第一次可以

2.C -> 解雇 -> B -> 呈现 -> C,触摸屏幕后调用 viewWillAppear

当我展示C时,viewdidload被调用,但是在我触摸屏幕并调用viewWillAppear之后 View 没有改变,所以如果我没有触摸屏幕,我的屏幕看起来像B,但实际上,C已经完成了viewdidload。

c 是带有表格 View 的 ScrollView 内容,一些答案提到了导航 Controller ,但我根本没有使用任何导航 Controller 。

B -> C,当我从 TableView 中选择时调用

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let l3ViewController = Utl.getViewControllerWithStoryboard("Home", identifier: "L3ViewController") as? L3ViewController
guard let vc = l3ViewController else {
return
}
self.presentDetail(vc)
}
}

self.presentDetail(vc) 是我的 UIViewController 扩展,但是当我尝试使用 present(viewController,animated: false) 时,问题也会发生,所以这个扩展看起来不错

extension UIViewController {

func presentDetail(_ viewControllerToPresent: UIViewController) {
let transition = CATransition()
transition.duration = 0.3
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromRight
self.view.window!.layer.add(transition, forKey: kCATransition)

present(viewControllerToPresent, animated: false)
}
func dismissDetail() {
let transition = CATransition()
transition.duration = 0.3
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromLeft
self.view.window!.layer.add(transition, forKey: kCATransition)

dismiss(animated: false)
}
}

查看C

override func viewDidLoad() {
super.viewDidLoad()

// some of functions
dataKeyAndValue()
calculateLabelXAndWidth()

// some of my view set up here
setProcessView()
setScrollView()
setTableView()

print("view did l3")

}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
print("view will l3")
}

NSLOG 如下

// B -> C first time
2018-03-19 11:50:45.885423+0800 ROLLCALL[5624:204120] viewDidLoad l3
2018-03-19 11:50:45.888306+0800 ROLLCALL[5624:204120] viewWillAppear l3
// back to B and presnt to C
2018-03-19 11:50:50.295844+0800 ROLLCALL[5624:204120] viewDidLoad l3
// touch screen
2018-03-19 11:50:52.369439+0800 ROLLCALL[5624:204120] viewWillAppear l3

我确实注意到这个问题是从使用核心数据轻量级迁移开始的,以前有人有过同样的经历吗?

编辑

对于某些情况,我确实使用了如下所示的一些警报。

let alertController = UIAlertController(title: "",message: nil,preferredStyle: .alert)
self.present(alertController, animated: true, completion: nil)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
self.presentedViewController?.dismiss(animated: false, completion: nil)
}

回答

我现在把这个方法从B改为C,效果很好,有人可以给我解释一下吗?

 DispatchQueue.main.async(execute: { () -> Void in
self.presentDetail(vc)
})

最佳答案

尝试使用 viewdidappear 而不是 viewwillappear

关于ios - viewWillAppear 触摸屏后调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49355412/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com