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”的背景视图打开一个警报,如何更改此行,使其成为以前选择的索引