【问题标题】:Perform segue on press on Back button按下后退按钮执行 segue
【发布时间】:2015-07-30 07:09:35
【问题描述】:

我想在单击后退按钮时执行 segue。我这样做:

override func didMoveToParentViewController(parent: UIViewController?) {
    self.performSegueWithIdentifier("fromGalleryToBody", sender: self)
}

但是当我点击返回按钮时它会导致我的应用程序崩溃。怎么实现?

【问题讨论】:

    标签: ios xcode swift segue


    【解决方案1】:

    导航的默认按钮为您提供移动到上一个视图的功能

    您可以通过以下方式查看:

    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 崩溃
    • 如何将“
    • @OrkhanAlizade 您必须使用“
    • 你知道如何添加吗?
    【解决方案2】:

    请检查。这是您需要的示例。

    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

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      相关资源
      最近更新 更多