Swift 如果用户单击“后退”按钮,则快速添加操作
我使用以下代码成功检测到用户是否单击了后退按钮:Swift 如果用户单击“后退”按钮,则快速添加操作,swift,stack,warnings,Swift,Stack,Warnings,我使用以下代码成功检测到用户是否单击了后退按钮: override func viewWillDisappear(animated: Bool) { let viewControllers: NSArray = self.navigationController?.viewControllers as! NSArray if viewControllers.indexOfObject(self) == NSNotFound { self.navigationCon
override func viewWillDisappear(animated: Bool) {
let viewControllers: NSArray = self.navigationController?.viewControllers as! NSArray
if viewControllers.indexOfObject(self) == NSNotFound {
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
super.viewWillDisappear(animated)
}
let viewControllers: [UIViewController] = self.navigationController?.viewControllers as! [UIViewController]
override func viewWillDisappear(animated: Bool) {
if let viewControllers = navigationController?.viewControllers as? [UIViewController] {
if let index = find(viewControllers, self) {
navigationController?.setNavigationBarHidden(true, animated: true)
}
}
viewWillDisappear(animated)
}
但我得到以下警告:
从“[AnyObject]”强制转换到不相关类型“NSArray”总是失败
是否有一种“更整洁”的方法来实现这一点?基本上,问题是您试图强制转换为objective-c数组类型NSArray。Swift使用数组而不是NSArray/NSMutableArray。如果要在Swift中强制转换数组,必须指定数组中对象的类型。因此,以下代码:
override func viewWillDisappear(animated: Bool) {
let viewControllers: NSArray = self.navigationController?.viewControllers as! NSArray
if viewControllers.indexOfObject(self) == NSNotFound {
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
super.viewWillDisappear(animated)
}
let viewControllers: [UIViewController] = self.navigationController?.viewControllers as! [UIViewController]
override func viewWillDisappear(animated: Bool) {
if let viewControllers = navigationController?.viewControllers as? [UIViewController] {
if let index = find(viewControllers, self) {
navigationController?.setNavigationBarHidden(true, animated: true)
}
}
viewWillDisappear(animated)
}
将其强制转换为UIViewController的数组(Swift数组)。实际上,你可以把它写得更短,只需要这样:
let viewControllers = self.navigationController?.viewControllers as! [UIViewController]
您应该使用Swift数组-
[UIViewController]
固定问题:
override func viewWillDisappear(animated: Bool) {
let viewControllers: [UIViewController] = self.navigationController?.viewControllers as [UIViewController]
if let index = find(viewControllers, self)
{
//your object exists in that is at index
}
else
{
//your object is not in the navigation controller
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
super.viewWillDisappear(animated)
}
if find(viewControllers, self) == nil
{
//your object isnt in the viewControllers array
}
如果让else,则可以使用:
override func viewWillDisappear(animated: Bool) {
let viewControllers: [UIViewController] = self.navigationController?.viewControllers as [UIViewController]
if let index = find(viewControllers, self)
{
//your object exists in that is at index
}
else
{
//your object is not in the navigation controller
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
super.viewWillDisappear(animated)
}
if find(viewControllers, self) == nil
{
//your object isnt in the viewControllers array
}
请尝试以下代码:
override func viewWillDisappear(animated: Bool) {
let viewControllers: NSArray = self.navigationController?.viewControllers as! NSArray
if viewControllers.indexOfObject(self) == NSNotFound {
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
super.viewWillDisappear(animated)
}
let viewControllers: [UIViewController] = self.navigationController?.viewControllers as! [UIViewController]
override func viewWillDisappear(animated: Bool) {
if let viewControllers = navigationController?.viewControllers as? [UIViewController] {
if let index = find(viewControllers, self) {
navigationController?.setNavigationBarHidden(true, animated: true)
}
}
viewWillDisappear(animated)
}
在我看来,使用find()更符合Swift。如果找到,find()将返回元素的索引,否则返回nil。I get
无法使用类型为“([AnyObject]?,…”的参数列表调用“find”。
I get[UIViewController]没有名为“indexOfObject”的成员
这将不起作用。在Swift中,navigationController.ViewController将始终包含self。有一种比查看视图中的视图控制器更简单的方法视图将消失
。调用IsbeingDismised
内部视图将消失
。