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

Ios 创建触发警报视图控制器的选项卡栏项,ios,swift,uitabbarcontroller,Ios,Swift,Uitabbarcontroller,我有一个UITabBarController,我想创建一个只触发警报视图控制器的项目 我希望警报显示在按下按钮的视图控制器的顶部 这是我现在的代码,但由于某些原因它不起作用: override func viewDidLoad() { super.viewDidLoad() self.tabBarController?.delegate = self } override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBar

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

这里是它如何工作的示例

编辑:

您需要添加UITABBARCONTROLLEDELEGATE,并且在视图中将显示添加:

self.tabbarController?.delegate = self
然后在课堂上:

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {

    if tabBarController.selectedIndex == 2{
        tabBarController.selectedIndex = 0
        let alert = UIAlertController(title: "Do something", message: "With this", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "A thing", style: .default) { action in
        })
        self.present(alert, animated: true, completion: {
        })
    }
}
@swift 4中的非逃逸和@逃逸差异 @不逃逸 1.默认为不转义

2.将闭包作为函数传递

3.调用返回@non-escaping Closure之前的函数

4.不再存在于内存中

5.编译器知道@non-escaping闭包句柄内存分配。会的 注意记忆力

6.调用函数时必须且应该提供[弱自我]。它是安全的。因为 在函数返回之前调用@non-escaping闭包的

@逃逸 1转义不是默认值。默认情况下,Swift 1X、2X@转义

2.将闭包作为函数传递

3.调用@escaping闭包后函数返回

4.@执行时存在转义闭包内存

5.在函数之外,还执行了@escaping closure

6.大多数开发人员认为@escaping中的第3点是如何在函数返回后调用@escaping闭包。实际上,自上而下的代码就是这样想的 从上到下表示类似于.Sync。但在我们的例子中,异步是有效的

如果您不知道.Sync.Async

.Sync表示逐个执行

.Async。随机执行的。所以函数在@escaping closure之后返回

执行

提供您的代码支持的更多详细信息我添加了一些代码,请查看您是否能说出问题所在。我添加了我的代码,我尝试将其更改为didSelect,但无效,有什么想法吗?您是否在“:”之后添加了UITABBARCONTROLLEDELEGATE?”您是否将delegate=self放入viewwillbeen?@H.Epstein在.delegate=self处创建断点,并在控制台中键入“po self.tabbarcontroller”,它必须是!=无如果不是nil,则必须检查委托是否仅分配在一个位置。@pkesaj这将始终以“tabBarController.selectedIndex=0”的背景视图打开一个警报,如何更改此行,使其成为以前选择的索引