从标签栏控制器打开带有后退按钮的单独 ViewController

Posted

技术标签:

【中文标题】从标签栏控制器打开带有后退按钮的单独 ViewController【英文标题】:Opening a Separate ViewController with back button from a tabbar controller 【发布时间】:2018-09-24 13:07:47 【问题描述】:

我有一个 Tabbar 控制器,在该控制器中我显示了 5 个以上的视图控制器。一切都按预期工作。

但是现在我有一个具有 UiTableView 的 ViewController,在单元格上单击我想打开一个 DetailView 控制器。

那个 DetailViewController 将在 Navigation View Controller 中有一个 Title 和返回按钮以再次返回列表。

请帮助我如何使用 Swift 来做到这一点?

【问题讨论】:

现在我有一个具有 UiTableView 的 ViewController 这个来自选项卡?? 是的。那是来自标签 【参考方案1】:

你想显示detailVC的vc应该嵌入到navigationController中,然后使用push/pop来管理显示/隐藏

let vc = ///

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

//

self.navigationController?.popViewController(animated: true)

【讨论】:

我已经这样做了,我将它嵌入到导航控制器中并将其推入导航控制器,当它打开时,有返回按钮。但从那个后退按钮它进入空白屏幕而不是存在于 taabbar 中的 UItableView 屏幕。或者哪个打开了DetailView vc【参考方案2】:
import UIKit

class ViewController: UIViewController 

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


@IBAction func moveToNexScreen(_ sender: Any) 
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let nextVc = storyboard.instantiateViewController(withIdentifier: "NextViewController") as! NextViewController
    let navigationVc = UINavigationController(rootViewController: nextVc)
    present(navigationVc, animated: false, completion: nil)



class NextViewController: UIViewController 

override func viewDidLoad() 
    super.viewDidLoad()
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(self.closeBackButtonPressed))        


@objc func closeBackButtonPressed()
    self.dismiss(animated: false, completion: nil)


将您的 detailView 放在 UINavigationController(rootViewController: detailVc) 中,然后您可以展示它并拥有一个后退按钮,您可以通过编程方式在 detailsView 上添加一个 barbutton 项

【讨论】:

我按照你说的做了,但是当我点击后退按钮时,它会将我带到空白屏幕,而不是包含 TableView 的 ViewController 您在 didSelectRowAtIndexPath、pushNavigationController 或 self.present 中使用什么方法,如果您使用的是 push,那么它可能无法正常工作,因此您需要展示,但它没有后退按钮,因此您需要创建一个视图中的详细视图中的 barbutton 项确实像 self.navigationController.leftBarButtonItem 一样加载。 我最终使用了独立的 NavigationBar。并在其上制作按钮 尝试我更新的答案将两个视图控制器放在一个标签中,并从任何一个视图控制器使用创建导航栏,就像我所做的那样,如果你不是,则向目标视图控制器添加下一个视图控制器代码有能力我会为你提供一个带有示例项目的 git 链接。谢谢 虽然我没有使用导航控制器。我使用了导航栏,但是对于后退按钮,我已经完成了您在此处建议的操作【参考方案3】:

使用 -

#import <DetailViewController.h>

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    NSIndexPath *indexPath = [_tableView indexPathForCell:sender];

    DetailViewController *details = (DetailViewController *)segue.destinationViewController;

    details.dictionary = _json[indexPath.row]; // to pass data


在故事板中 -

Select Cell and drag a segue to Details view controller

【讨论】:

这个答案与问题无关【参考方案4】:

也许这个故事板插图会对您有所帮助。显示您需要的 vcs 很干净。

【讨论】:

这张图有点不对或者你可以说这不是我想要的,根据我的要求,我想问一下,假设在Navigation控制器之前有一个简单的视图控制器,并且ViewController 希望打开 Navigation 控制器或 RootView 控制器。但是在这个根视图控制器上,我想要一个返回简单视图控制器的后退按钮。这是标签栏的第一个项目 为什么不直接使用 nav viewcontroller 作为标签栏的 firstItem? bcz 我以这种方式构建了整个应用程序

以上是关于从标签栏控制器打开带有后退按钮的单独 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController 更改导航栏后退按钮标题

如何在标签栏控制器视图上创建后退按钮?

从带有搜索栏的表格单元格创建模式视图时,无法在导航栏中创建后退按钮

如何在标签栏视图控制器中显示后退按钮?

iOS 7 - 后退按钮后标签栏消失

可以在标签栏控制器中隐藏导航栏吗?