UITableViewController 在关闭第二个 ViewController 后返回到第一个单元格

Posted

技术标签:

【中文标题】UITableViewController 在关闭第二个 ViewController 后返回到第一个单元格【英文标题】:UITableViewController goes back to 1st cell after dismissing 2nd ViewController 【发布时间】:2016-01-22 10:05:57 【问题描述】:

我在 UITableViewController 中实现了 didSelectRowAtIndexPath:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 

    // determine selected cell
    let name = self.names[indexPath.row]

    // present menu VC
    let destVC: UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("MenuItemsReadOnly") as UIViewController

    self.navigationController?.pushViewController(destVC, animated: true)

到目前为止一切顺利。它工作正常。在我关闭 destVC 后,我的问题就开始了:

func doneSelf() 
    self.navigationController?.popViewControllerAnimated(true)

解雇后,我回到了我的 UITableViewController,但视图一直滚动到顶部,因此第一个单元格可见。

我还没有实现函数viewDidAppear。我没有在 viewDidLoad 中调用 tableView.reloadData(),这是我在 UITableViewController 中实现的唯一与视图相关的方法:

override func viewDidLoad() 
    super.viewDidLoad()

    self.tableView.delegate = self
    self.tableView.dataSource = self

    // format navigation controller
    self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()]
    self.navigationController!.navigationBar.translucent = false
    self.navigationController!.navigationBar.barStyle = .Black
    self.navigationController!.navigationBar.barTintColor = UIColor.flatRedColor()
    self.navigationController!.navigationBar.tintColor = UIColor.flatRedColor()

    self.automaticallyAdjustsScrollViewInsets = false

    self.tableView.backgroundColor = UIColor.flatWhiteColor()

    // format table UI
    self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None

    // last cell would get cropped off without this
    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 64, 0)

    // navigation buttons
    navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "IconMenuShortcut"), style: .Plain, target: self, action: "presentLeftMenuViewController")
    navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()        

这是设计使然吗?从第二个 UIViewController 回来后,如何让选定的单元格保持在视图中并且不会自动移回顶部?

【问题讨论】:

这不是设计使然,您可能在viewDid/WillAppear 中编写了一些代码,导致了这种情况。 ***.com/questions/34868661/… 使用这个!它会解决你的问题。也请为答案投票。 这很好用,谢谢!如果您将评论改写为答案,我会接受。 【参考方案1】:

对选定的indexPath 有一个引用,当返回TableviewController 时,调用

    [self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionNone animated:YES];

【讨论】:

感谢您的建议,但仍然有一些动作,即使使用动画:false 选项。我需要的是 tableView 在第二个 VC 被解雇后根本不动。

以上是关于UITableViewController 在关闭第二个 ViewController 后返回到第一个单元格的主要内容,如果未能解决你的问题,请参考以下文章

将 TAB BAR 添加到 uitableviewcontroller [关闭]

UITableViewController 在关闭第二个 ViewController 后返回到第一个单元格

为啥这个 UITableViewController 会模态地关闭?

无法关闭 Popover UITableViewController

将TAB BAR添加到uitableviewcontroller [关闭]

当我从 UITableViewController 打开自定义 UIView 时,如何关闭自定义视图并返回表格视图?