从viewcontroller转到表视图的下一个单元格

时间:2016-06-17 11:57:43

标签: ios swift uitableview uiviewcontroller swift2

我对Swift项目有疑问。 我有TableViewController个多个单元格,当我点击它们时,我会转到ViewController,其中数据从tableViewController传递。

我想在ViewController中实现一个按钮,该按钮允许我显示ViewController内容" next cell"从表视图控制器。例如,我点击了表视图控制器的第二个单元格,所以我转到ViewController,显示与该单元格对应的数据,然后当我点击那个" next" viewController中的按钮我想显示表视图控制器的第3个单元格的内容。我该如何以干净的方式做到这一点?

以下是我用于将数据从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显示了一篇文章的网络视图,我有一个班级{{1其中Article来自):

articleLink

我在 if let a = article { articleWebView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(a.articleLink, ofType: "html")!))) } 中链接了nextButton

Main.Storyboard

我对Swift相对较新,并且不知道该怎么做(我的主要问题是因为我在@IBOutlet weak var nextButton: UIButton! 中声明了我的数据,而且我不知道怎么做保留tableViewController中的ViewController和"导入"数据。

1 个答案:

答案 0 :(得分:1)

像这样更改TableViewController's prepareForSegue的代码

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,因此请创建与您在articles中创建的TableViewController数组对象相同的内容。

希望这会对你有所帮助。