我有一个UITabBarController
,我想创建一个只触发警报视图控制器的项目。
我希望警报显示在按下按钮的视图控制器的顶部。
这是我的代码,但由于某种原因它不起作用:
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.delegate = self
}
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
if item.title == "Title"{
let action = UIAlertAction(title: "OK", style: .default, handler: { (nil) in
self.tabBarController?.selectedIndex = 0
})
let alert = UIAlertController(title: "Feature not active yet", message: "Will be added soon", preferredStyle: .alert)
alert.addAction(action)
present(alert, animated: true, completion: nil)
}
}
它显示警报但不会移动到OK操作处理程序中的索引0。
答案 0 :(得分:1)
https://github.com/pkesaj/TabbarItemAlert
这里是一个示例,它是如何工作的。
编辑:
您需要添加一个UITabbarControllerDelegate并在viewWillAppear中添加:
action="#targetDiv"
然后在课堂上:
self.tabbarController?.delegate = self
答案 1 :(得分:0)
1。默认为非转义。
2。将闭包作为函数传递。
3。返回之前的函数@无转义的闭包被调用。
4。内存中不再存在。
5.Compiler知道@ non-escapeing Closure Handle内存分配。它会 注意内存。
6。调用函数时必须且应该提供[弱自我]。这是安全的。因为 @ non-escapeing的闭包被称为函数返回之前。
1转义不是Default。 Swift 1X,默认为2X转义。
2。将闭包作为函数传递。
3。函数在@escapeing闭包被调用后返回。
4. @在执行过程中存在转义关闭内存。
5。在@escaping闭包之外,还执行了
。6. @ escaping中大多数开发人员的思考点-3如何在函数返回后调用@escaping闭包。其实从上到下的代码都认为这 从上到下的意思是 .Sync 。但是在我们的案例中,。异步有效。
如果您不了解 .Sync 和 .Async 。
.Sync 表示一个一执行。
。异步。随机执行。因此,函数在@转义闭包后返回
已执行。