从视图控制器转到表格视图的下一个单元格

Posted

技术标签:

【中文标题】从视图控制器转到表格视图的下一个单元格【英文标题】:Go to next cell of a table view from the viewcontroller 【发布时间】:2016-06-17 11:57:43 【问题描述】:

我有一个关于 Swift 项目的问题。 我有一个带有多个单元格的TableViewController,当我点击它们时,我会转到ViewController,其中数据是从tableViewController 传递的。

我想在ViewController 中实现一个按钮,它允许我显示ViewController 以及表格视图控制器中“下一个单元格”的内容。例如,我点击了表格视图控制器的第二个单元格,所以我转到显示与该单元格对应的数据的ViewController,然后当我点击viewController 中的“下一步”按钮时,我想要显示表格视图控制器的第三个单元格的内容。我该如何以干净的方式做到这一点?

这是我用来将数据从tableViewController 传递到ViewController 的代码:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    if let a = articles 
        return a.count
    
    return 0


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

    let article = articles?[indexPath.row]

    if let a = article 
        cell.textLabel?.text = a.articleName
        cell.textLabel?.font = UIFont(name: "Avenir", size: 18)
        cell.textLabel?.numberOfLines = 0
        if let i = a.tableViewImage 
            cell.imageView?.image = UIImage(named: i)
        

    

    return cell


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "ShowArticle" 
        let articleVC = segue.destinationViewController as? ArticleViewController

        guard let cell = sender as? UITableViewCell,
            let indexPath = tableView.indexPathForCell(cell) else 
                return
        

        articleVC?.article = articles?[indexPath.row]
    

    

viewController 中,为了显示正确的文章,我在viewDidLoad() 中写了这个(我的viewController 显示了一篇文章的网络视图,我有一个Article 类,其中articleLink 来自):

    if let a = article 
        articleWebView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(a.articleLink, ofType: "html")!)))
    

我在Main.Storyboard 中链接了一个nextButton

@IBOutlet weak var nextButton: UIButton!

我对 Swift 比较陌生,不知道该怎么做(我的主要问题是因为我在 tableViewController 中声明了我的数据,而我不知道如何才能留在 ViewController并从tableViewController“导入”数据。

【问题讨论】:

【参考方案1】:

像这样更改TableViewController'sprepareForSegue的代码

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "ShowArticle" 
        let articleVC = segue.destinationViewController as? ArticleViewController
        guard let cell = sender as? UITableViewCell, let indexPath = tableView.indexPathForCell(cell) else 
            return
        
        articleVC?.articles = articles
        articleVC?.selectedIndex = indexPath.row
        articleVC?.article = articles?[indexPath.row]
    

现在在您的ViewController 中添加两个全局变量,如下所示,也可以像这样更改您的下一个按钮点击

var articles: [article]!
var selectedIndex: Int!

//Now your button click
@IBAction func nextButtonClick(sender: UIButton) 
    if ((self.selectedIndex + 1) < self.articles.count) 
        self.selectedIndex++
        let nextArticle = self.articles[self.selectedIndex]
        articleWebView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(nextArticle.articleLink, ofType: "html")!)))
    

我不知道您使用的是NSArrayArray,因此请创建与您在TableViewController 中创建的相同的articles 数组对象。

希望这会对你有所帮助。

【讨论】:

你是救生员,谢谢!它就像一个魅力,我只是在你的 nextButtonClick 答案中将 a.articleLink 更改为 nextArticle.articleLink (如果将来有人需要这个)。感谢您的帮助:)

以上是关于从视图控制器转到表格视图的下一个单元格的主要内容,如果未能解决你的问题,请参考以下文章

从一个单元格转到不同的控制器(详细视图和 avcontroller)

表格视图单元格中的集合视图

如何使用textview移动到表格视图中的下一个单元格/行

如何将segue从表格视图中的单元格单击推送到另一个视图控制器[重复]

主从情节提要:表格视图不显示单元格(Objective-C)

如何使用自定义表格视图单元格中识别的点击手势从 UILabel 呈现视图控制器?