从UITableCellView和UITableView传输数据

时间:2017-05-14 00:20:52

标签: ios swift uitableview

我有一个UITableViewController,它有自己的类 HomeVC ,包含多个Cell,其中一个使用自己的类 NewsFeedCell 。此单元格包含一个显示图片的垂直UIScrollView。我希望用户在点击该行时,用图片触发一个带有VC的segue。我在 NewsFeedCell 类中创建了一个 currentPage 变量,它显然显示了哪个页面,以及哪个图片是UIScrollView显示。

HomeVC 中,我有:

class HomeVC: UITableViewController {
(...)
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
 (...)   
 if indexPath.row == 0 { //The cell containing the UIScrollView
        print(NewsFeedCell.currentPage) // I used "print" to simply the shown code 
    }
  }
}

问题是xcode给我一个错误,说 实例成员“currentPage”不能用于“NewsFeedCell”类型

我尝试在 NewsFeedCell 的代码中将currentPage的值打印到控制台,并且它有效。

顺便说一句,该变量在 NewsFeedCell 中声明,并且在 awakeFromnNib() 下的第一个值分配为0,第二次下:

func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView){
    currentPage = Int(floor((scrollView.contentOffset.x - cellWidth / 2) / cellWidth)) + 1
    print(currentPage)
}

请帮助!

1 个答案:

答案 0 :(得分:0)

听起来您创建了currentPage作为实例变量,这意味着NewsFeedCell类型的每个对象都有自己的版本。要访问它,您必须引用个人NewsFeedCell,如下所示:

var myCell = NewsFeedCell()
print(myCell.currentPage)

并且每个单元格的值都不同。如果你希望所有currentPage只有一个NewsFeedCell,你可以将它声明为静态,就像这样(在NewsFeedCell类中):

static var currentPage: Int = 0

然后您可以像以前一样使用NewsFeedCell.currentPage访问它。

您能够print(currentPage)内部函数NewsFeedCell的原因是该函数是实例方法。每个实例都有自己的副本,并为调用该方法的特定实例打印currentPage。

我不太清楚你究竟想用currentPage做什么,所以我不确定你是想要静态变量还是实例变量。通常,如果您希望可以从任何地方访问变量的单个版本,请将其设置为静态。如果您希望每个单元格都有自己的值,请将其设为常规实例变量。