如何从UITabBarController Child ViewController执行segue到UITavigationController的DetailView,其中包含UINavigationController?
有一个带有两个子节点的TabBarController,FirstView(观看次数最多的符号)和NavigationController(Contacts Symbol)。
FirstView有一个按钮,它应该执行一个segue来显示Profile VC。 NavCont有一个带有子类All ProfilesTVC的TableView,其原型单元格为子节点。 AllProfilesTVC有一个包含三个名称的数组,由重用的单元格显示。
我必须在FirstView(HomeVC)中的函数prepareForSegue中实例化和准备哪个viewcontroller,以及我在storyboard中创建的segue应该指向哪里?所以我在" John""详细视图。 是否有可能当我对ShowProfileVC执行segue时,我可以按后退按钮返回All ProfilesTVC?
对于想要在github repo
尝试的人,有一个github回购FirstView / HomeVC.swift
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// what do we do here ???
}
AllItemsTVC
class AllItemsTVC: UITableViewController {
let profiles = ["Joe", "John", "Ken"]
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return profiles.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
let profile = profiles[indexPath.row] as String
cell.textLabel?.text = profile
return cell
}
@IBAction func cancelFromShowProfile(segue: UIStoryboardSegue) {
}
// MARK: - Navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let identifier = segue.identifier {
switch identifier {
case "ShowProfile":
if let showProfileVC = segue.destinationViewController as? ShowProfileVC {
// pass the data to the destinationVC
let selectedProfile = profiles[tableView.indexPathForSelectedRow()!.row] as String
showProfileVC.name = selectedProfile
}
default: break
}
}
}
ShowProfileVC
class ShowProfileVC: UIViewController {
@IBOutlet weak var textLabel: UILabel! {
didSet {
textLabel.text = name
}
}
var name = "Label"
override func viewDidLoad() {
super.viewDidLoad()
}
}
感谢您的帮助。
答案 0 :(得分:0)
你不能用segue做到这一点,但这不是问题,因为你可以在代码中完成它。只需在故事板中为视图控制器提供identifier
,并使用相应的UIStoryboard
API通过此标识符对其进行实例化。
首先切换到代码中的另一个标签栏项目,然后首先告诉导航控制器popToRootViewController
,之后您可以依次将所有必要的控制器推送到导航堆栈。您可以在推送控制器之前执行通常在prepareForSegue
中执行的所有配置。
诀窍是在animated
设置为false
的情况下完成所有操作,但最后一步除外。