我有一个UITableViewController,它有自己的类HomeVC,包含多个单元格,其中一个单元格使用自己的类NewsFeedCell。此单元格包含显示图片的垂直ui视图。我希望用户在单击行时,触发一个带有图片的VC的segue。我在NewsFeedCell类中创建了一个currentPage变量,它显然显示了哪个页面和哪个图片是UIScrollView显示的。
在家庭影院,我有:
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)
}
请帮忙!
最佳答案
听起来您创建了一个实例变量currentPage
,这意味着NewsFeedCell
类型的每个对象都有自己的版本。要访问它,您必须具有对个人的引用,如下所示:
var myCell = NewsFeedCell()
print(myCell.currentPage)
它的值对于每个细胞都是不同的。如果希望所有
NewsFeedCell
s都只有一个currentPage
,则将其声明为静态,如下所示(在NewsFeedCell类中):static var currentPage: Int = 0
然后您可以像以前一样使用
NewsFeedCell
访问它。您之所以能够从
NewsFeedCell.currentPage
中的函数print(currentPage)
中调用,是因为该函数是一个实例方法。每个实例都有自己的副本,它为调用该方法的特定实例打印当前页。我不太清楚你到底想用
NewsFeedCell
做什么,所以我不确定你是想要一个静态变量还是一个实例变量。一般来说,如果您希望变量有一个可以从任何地方访问的单一版本,请将其设为静态。如果希望每个单元格都有自己的值,请将其设置为常规实例变量。关于ios - 从UITableCellView和UITableView传输数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43959218/