gpt4 book ai didi

ios - 是否可以从 iOS 中的另一个函数调用 block 完成处理程序?

转载 作者:搜寻专家 更新时间:2023-10-30 22:07:07 25 4
gpt4 key购买 nike

我有一个带有 UITapGestureRecognizer 的自定义 UIView。手势识别器调用一个名为 hide() 的方法来从父 View 中删除 View :

func hide(sender:UITapGestureRecognizer){
if let customView = sender.view as? UICustomView{
customView.removeFromSuperview()
}
}

UICustomView 还有一个 show() 方法可以将它添加为 subview ,如下所示:

func show(){
// Get the top view controller
let rootViewController: UIViewController = UIApplication.sharedApplication().windows[0].rootViewController!!
// Add self to it as a subview
rootViewController.view.addSubview(self)
}

这意味着我可以创建一个 UICustomView 并显示它:

let testView = UICustomView(frame:frame) 
testView.show() // The view appears on the screen as it should and disappears when tapped

现在,我想将我的 show() 方法变成一个带有完成 block 的方法,该 block 在触发 hide() 函数时调用。像这样的东西:

testView.show(){ success in
println(success) // The view has been hidden
}

但要这样做,我必须从我的 hide() 方法调用 show() 方法的完成处理程序。这是可能的还是我忽略了什么?

最佳答案

由于您正在实现 UICustomView,您需要做的就是将“完成处理程序”存储为 UICustomView 类的一部分。然后在调用 hide() 时调用处理程序。

class UICustomView : UIView {
var onHide: ((Bool) -> ())?

func show (onHide: (Bool) -> ()) {
self.onHide = onHide
let rootViewController: UIViewController = ...
rootViewController.view.addSubview(self)
}

func hide (sender:UITapGestureRecognizer){
if let customView = sender.view as? UICustomView{
customView.removeFromSuperview()
customView.onHide?(true)
}
}

当然,每个 UIView 都有一个生命周期:viewDidAppearviewDidDisappear 等。因为您的 UICustomViewUIView 的子类,您可以覆盖生命周期方法之一:

class UICustomView : UIView {
// ...

override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear (animated)
onHide?(true)
}
}

如果 View 可能会在不调用 hide() 的情况下消失,但您仍然希望运行 onHide,则您可能会考虑第二种方法。

关于ios - 是否可以从 iOS 中的另一个函数调用 block 完成处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28658807/

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