【发布时间】:2015-07-30 07:09:35
【问题描述】:
我想在单击后退按钮时执行 segue。我这样做:
override func didMoveToParentViewController(parent: UIViewController?) {
self.performSegueWithIdentifier("fromGalleryToBody", sender: self)
}
但是当我点击返回按钮时它会导致我的应用程序崩溃。怎么实现?
【问题讨论】:
我想在单击后退按钮时执行 segue。我这样做:
override func didMoveToParentViewController(parent: UIViewController?) {
self.performSegueWithIdentifier("fromGalleryToBody", sender: self)
}
但是当我点击返回按钮时它会导致我的应用程序崩溃。怎么实现?
【问题讨论】:
导航的默认按钮为您提供移动到上一个视图的功能
您可以通过以下方式查看:
override func didMoveToParentViewController(parent: UIViewController?) {
if parent == nil {
println("Back Pressed")
}
}
但情况是didMoveToParentViewController意味着它已经移动到上一个视图。
您可以在导航栏中添加自定义按钮作为后退按钮。那么你的问题就迎刃而解了。
以编程方式添加按钮:
let backButton = UIBarButtonItem(title: "Назад в будущее", style: .Plain, target: self, action: "toMainFromGallery")
self.navigationItem.leftBarButtonItem = backButton
功能:
func toMainFromGallery {
}
带返回图标的按钮:
var backButton = UIButton(frame: CGRectMake(0, 0, 70.0, 70.0))
var backImage = UIImage(named: "backBtn")
backButton.setImage(backImage, forState: UIControlState.Normal)
backButton.titleEdgeInsets = UIEdgeInsetsMake(10.0, 10.0, 10.0, 0.0)
backButton.setTitle("Back", forState: UIControlState.Normal)
backButton.addTarget(self, action: "buttonPressed", forControlEvents: UIControlEvents.TouchUpInside)
var backBarButton = UIBarButtonItem(customView: backButton)
self.navigationItem.leftBarButtonItem = backBarButton
左边应该有空格如果你想删除它添加间隔像:
var spacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
spacer.width = -15
self.navigationItem.leftBarButtonItems = [spacer,backBarButton]
后退图标图像应分别为 22px、44px 和 66px = @1x、@2x 和 3x
【讨论】:
let backButton = UIBarButtonItem(title: "Назад в будущее", style: UIBarButtonItemStyle.Plain, target: navigationController, action: "toMainFromGallery") navigationItem.leftBarButtonItem = backButton 但它与[UINavigationController toMainFromGallery]: unrecognized selector sent to instance 崩溃
请检查。这是您需要的示例。
Delegates and Segues in Swift 或
你需要像安德鲁所说的那样在你的视图控制器中设置。
把这段代码放在你想捕获返回按钮调用的视图控制器中:
override func didMoveToParentViewController(parent: UIViewController?) {
if (!(parent?.isEqual(self.parentViewController) ?? false)) {
println("Back Button Pressed!")
}
}
在 if 块内部,处理您需要传回的任何内容。您还需要引用回调用视图控制器,因为此时很可能 parent 和 self.parentViewController 都为零,因此您无法导航视图控制器树。
此外,您可能只需检查 parent 是否为零,因为我还没有发现按下后退按钮不会导致 parent 为 nil 的情况。所以这样的东西更简洁一点:
override func didMoveToParentViewController(parent: UIViewController?) {
if (parent == nil) {
println("Back Button Pressed!")
}
}
有关更多详细信息,请参阅此答案 Segue on Backbutton
【讨论】: