我有一个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)
}
请帮助!
答案 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
做什么,所以我不确定你是想要静态变量还是实例变量。通常,如果您希望可以从任何地方访问变量的单个版本,请将其设置为静态。如果您希望每个单元格都有自己的值,请将其设为常规实例变量。