【问题标题】:Xcode Swift Go back to previous viewController (TableViewController)Xcode Swift 返回上一个视图控制器(TableViewController)
【发布时间】:2015-05-13 13:30:12
【问题描述】:

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

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

编辑:

当我使用以下代码时,应用程序给我一个错误EXC_Breakpoint: (code=IEXC_386..),然后它转到视图控制器TeamOverviewController

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

【问题讨论】:

  • 你能显示一些代码吗?
  • dismissViewControllerAnimated(true, completion: nil)

标签: ios xcode swift uitableview uiviewcontroller


【解决方案1】:

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

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

这是 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")
    }


}

【讨论】:

  • 您好,感谢您的评论。这对我有用;)我还尝试了另一个代码: self.navigationController?.popViewControllerAnimated(true) 我把这行代码放在我的保存函数的末尾,这也有效。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多