Swift 如果用户单击后退按钮则添加操作
Swift add action if user click back button
我使用以下代码成功检测到用户是否点击了后退按钮:
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)
}
但我收到以下警告:
Cast from '[AnyObject]?' to unrelated type 'NSArray' always fails
有"neater"方法吗?
基本上问题是您试图转换为 objective-c 数组类型 NSArray。 Swift 使用 Array 而不是 NSArray/NSMutableArray。如果要在 Swift 中转换数组,则必须指定数组内对象的类型。所以下面的代码:
let viewControllers: [UIViewController] = self.navigationController?.viewControllers as! [UIViewController]
将其具体转换为 UIViewController 的数组(Swift 数组)。你实际上可以把它写得更短,只需要这样:
let viewControllers = self.navigationController?.viewControllers as! [UIViewController]
而不是 NSArray
,您应该使用 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 let else
,您可以使用:
if find(viewControllers, self) == nil
{
//your object isnt in the viewControllers array
}
试试下面的代码:
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() 将 return 元素的索引,否则为 nil。
我使用以下代码成功检测到用户是否点击了后退按钮:
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)
}
但我收到以下警告:
Cast from '[AnyObject]?' to unrelated type 'NSArray' always fails
有"neater"方法吗?
基本上问题是您试图转换为 objective-c 数组类型 NSArray。 Swift 使用 Array 而不是 NSArray/NSMutableArray。如果要在 Swift 中转换数组,则必须指定数组内对象的类型。所以下面的代码:
let viewControllers: [UIViewController] = self.navigationController?.viewControllers as! [UIViewController]
将其具体转换为 UIViewController 的数组(Swift 数组)。你实际上可以把它写得更短,只需要这样:
let viewControllers = self.navigationController?.viewControllers as! [UIViewController]
而不是 NSArray
,您应该使用 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 let else
,您可以使用:
if find(viewControllers, self) == nil
{
//your object isnt in the viewControllers array
}
试试下面的代码:
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() 将 return 元素的索引,否则为 nil。