如何在 iOS 中的 prepareForSegue 之前执行按钮按下操作?

Posted

技术标签:

【中文标题】如何在 iOS 中的 prepareForSegue 之前执行按钮按下操作?【英文标题】:How to execute button press action before prepareForSegue in iOS? 【发布时间】:2015-11-01 19:29:42 【问题描述】:

我正在创建一个 ios 应用程序,在该应用程序中我想在运行方法 prepareForSegue 之前在按下按钮时执行分配操作。

我使用主故事板创建了所有控件。

一些按钮的执行顺序是 按钮按下动作 -> prepareForSegue

但对于某些按钮,它是 prepareForSegue-> 按钮按下动作

如何更改第二组按钮的顺序?

这是我正在使用的代码:

import UIKit

class SummaryViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

    var button_prsd = "none"

    @IBAction func people_insights(sender: AnyObject) 
        button_prsd = "people_insights"
    

    @IBAction func industry_research(sender: AnyObject) 
        button_prsd = "industry_research"
    

    @IBAction func holidays_events(sender: AnyObject) 
        button_prsd = "holidays_events"
    

    @IBAction func monthly_spotlights(sender: AnyObject) 
        button_prsd = "monthly_spotlights"
    

    @IBAction func blog(sender: AnyObject) 
        button_prsd = "blog"
    


    @IBAction func about_us(sender: AnyObject) 
        button_prsd = "about_us"
        print("button press about us executed")
    


    @IBAction func settings(sender: AnyObject) 
        button_prsd="settings"
        print("button press settings executed")

    


    @IBAction func quiz(sender: AnyObject) 
        button_prsd="quiz"
        print("button press quiz executed")
    

    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.

        let next_view = segue.destinationViewController

        if(next_view is DetailViewController)
        
            let det_view = next_view as! DetailViewController
            det_view.link = button_prsd
            print("segue executed")
         else if(next_view is DetailTableViewController)
        
            let det_view = next_view as! DetailTableViewController

            print("segue executed")
        
    

【问题讨论】:

从 Interface Builder 中的按钮中删除故事板转场,Carl 从视图控制器对象(橙色框)拖动到目标场景并命名该转场。在您的代码中调用performSegueWithIdentifier 【参考方案1】:

我发现了问题,当以这种方式给出代码时,执行只是按字母顺序,所有其他方法都在 prepareForSegue 之前执行,因为方法按字母顺序出现在上面

当我将测验和设置方法重命名为 a_quiz 和 a_settings 时,它起作用了

【讨论】:

非常感谢。我从来没有这样想。

以上是关于如何在 iOS 中的 prepareForSegue 之前执行按钮按下操作?的主要内容,如果未能解决你的问题,请参考以下文章

iOS >> prepareForSegue >> IBOutlet 更新不起作用?

在prepareForSegue方法中防止segue?

prepareForSegue 更新到 iOS9 后冻结

使用导航控制器在“prepareForSegue”中设置数据

prepareForSegue 在 iOS 7 上无法获取目标视图控制器

PrepareForSegue 方法使应用程序 iOS 崩溃