如何在 Swift 2 中使用 TableView 项目访问视图控制器?

Posted

技术标签:

【中文标题】如何在 Swift 2 中使用 TableView 项目访问视图控制器?【英文标题】:How can you use TableView items to access View Controllers in Swift 2? 【发布时间】:2016-03-20 20:33:34 【问题描述】:

我正在尝试创建我的第一个 ios 应用,并计划发布到 App Store。这是一个选项卡式应用程序,TableView 嵌入到每个视图控制器中。这是我的一个选项卡式视图控制器的代码:

import Foundation
import UIKit

class AU: UITableViewController 

    var textArray = ["001", "002", "003", "004", "005", "006", "007", "008", "009", "010", "011", "012", "013", "014", "015", "016", "017", "018", "019", "020", "021", "022", "023", "024", "025", "026", "027", "028", "029", "030", "031", "032", "033", "034", "035", "036", "037", "038", "039", "040", "041", "042" ]

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

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCellWithIdentifier("AUCell") as UITableViewCell!

        cell.textLabel?.text = textArray[indexPath.row]

        return cell
    

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return textArray.count
    

所以,基本上,当用户点击textArray 中的一项时,我想切换到不同的视图控制器。我目前正在用 Swift 2 编写这个。

【问题讨论】:

【参考方案1】:

嵌入在UITabBarController 中的每个UIViewController 都有一个对UITabBarController 及其tabBarController 属性的引用。要更改标签栏的选中视图控制器,设置标签栏的selectedViewController:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    if (indexPath.row == 0)  // check the row that was selected
        self.tabBarController?.selectedIndex = 0 // select a new tab on the tab bar, changing the selected view controller
    

【讨论】:

感谢您的回复,但是,我不确定这是否正是我想要的。我的意思是它会发送到另一个无法访问的视图控制器。我不是说在标签栏之间切换。另外,我继续尝试了您的代码,并且在尝试设置要指向的情节提要 ID 之后,我最终收到此错误:无法实例化 UIMainStoryboardFile 'Main' 的默认视图控制器 - 可能是指定的条目点未设置? 啊,我明白了,所以您想从情节提要或 xib 实例化视图控制器并预设或推送它。在这种情况下,您需要使用要显示的新 VC 在 self 上调用 pushViewController 或 presentViewController。【参考方案2】:

首先在你的主故事板中创建几个 ViewController 并为它们提供 故事板 ID

创建名称列表:

let viewControllersNames = ["ViewController_1","ViewController_2","ViewController_3"]

在方法中:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    let vc = self.storyboard?.instantiateViewControllerWithIdentifier(self.viewControllersNames[indexPath.row])
    self.navigationController?.pushViewController(vc!, animated: true)

祝你好运!

【讨论】:

感谢您提供代码!我已成功将其添加到我的应用程序中,但是,我不确定如何重定向到特定的视图控制器。在一般情况下,我在这里有点菜鸟,我只能弄清楚代码的含义。该应用程序成功运行,但是,我收到两个视图控制器(您提到要创建的两个)无法访问的错误。

以上是关于如何在 Swift 2 中使用 TableView 项目访问视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中使用 MagicalRecord CoreData 删除 tableview 中的记录

TableView 使用 Swift 3 展开/折叠

如何在 Swift 中使用两个 TableView 设计动态布局

如何在 Swift 3 中使用 JSON 填充 TableView

如何在 swift 中使用 fetchedresultscontroller 重新排序 tableview 行?

如何在 Swift 2 中从 JSON 填充我的 tableView?