创建触发警报视图控制器的选项卡栏项

时间:2018-01-19 12:17:57

标签: ios swift uitabbarcontroller

我有一个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。

2 个答案:

答案 0 :(得分:1)

https://github.com/pkesaj/TabbarItemAlert

这里是一个示例,它是如何工作的。

编辑:

您需要添加一个UITabbarControllerDelegate并在viewWillAppear中添加:

action="#targetDiv"

然后在课堂上:

self.tabbarController?.delegate = self

答案 1 :(得分:0)

@ Swift 4中的非转义和@Escaping差异

@非转义

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 表示一个一执行。

。异步。随机执行。因此,函数在@转义闭包后返回
 已执行。