Xcode Swift返回上一个viewController(TableViewController)

时间:2015-03-11 16:23:44

标签: ios xcode swift uitableview uiviewcontroller

在我的TableviewController中,我的右上角有一个条形按钮项。单击按钮后,将显示新的视图控制器。在此Controller中,我将一些数据输入到文本字段并保存。要保存这些数据,我必须单击一个按钮,这也是右上角的一个条形按钮项。

但现在它将我委托给我的应用程序的第一个视图控制器。 我做了什么,它将我委托给表视图控制器?

编辑:

当我使用以下代码时,该应用会向我显示EXC_Breakpoint: (code=IEXC_386..)错误,并将其转到视图控制器TeamOverviewController

var vc = self.storyboard?.instantiateViewControllerWithIdentifier("TeamOverviewController") as ViewController
self.navigationController?.popToViewController(vc, animated: true)

2 个答案:

答案 0 :(得分:3)

似乎解决方案可以使用标准的“展开segue”。关于这个问题有很多帖子,但我总结了一种希望类似于你的问题的方法。

  1. 我使用TableViewController,在右上角有一个名为“Next”的条形按钮。单击Next时,它会显示一个ViewController,您可以在其中放置任何输入控件。
  2. ViewController的右上角还有一个“保存”按钮。
  3. 两个控制器都嵌入在NavigationControllers中以方便导航
  4. 单击“保存”按钮后,在保存需要保存的任何数据后,它将返回到TableViewController。
  5. 在TableViewController中,您需要添加一个我称之为 unwindToThisViewController的IBAction函数当您触摸ViewController中的“保存”按钮时,您将被定向到此处
  6. 在ViewController中,您需要按住Ctrl键并从“保存”按钮拖动到“退出”图标(ViewController故事板中的第三个图标)。当你这样做时,你会得到一个名为 unwindToThisViewController 的下拉选项作为你应该选择的呈现segue。现在,您的ViewController已连接到展开segue进程。
  7. 在ViewController中,不要为保存按钮放置IBActon。而是将您的保存命令放在函数prepareForSegue。
  8. 以下是2个控制器的代码:

        //
    //  TableViewController.swift
    
    import UIKit
    
    class TableViewController: UITableViewController {
    
        // add this function. When the detail ViewController is unwound, it executes this 
        // function
    
        @IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
            println("Returned from detail screen")
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        // MARK: - Table view data source
    
        override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            // Return the number of sections.
            return 1
        }
    
        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {        
            // Return the number of rows in the section.
            return 3
        }
    
    
        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
    
            // Configure the cell...
            cell.textLabel!.text = "Row: \(indexPath.row)"
            return cell
        }
    
    
    }
    
        //
    //  ViewController.swift
    //  Detail View
    
    import UIKit
    
    class ViewController: UIViewController {
    
        // When Save button is clicked, view controller is segued to the TableViewController to the function
        // unwindToThisViewController
    
        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.
        }
    
        // MARK: - Navigation
    
        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
            // Insert your save data statements in this function
            println("Insert your save data statements in this function")
        }
    
    
    }
    

答案 1 :(得分:2)

如果您使用UINavigationController,则可以直接弹出viewController您需要的内容。

示例:[self.navigationController popToViewController:TableViewController animated:YES];