我有一个 UITableViewController,它有自己的类 HomeVC,包含多个 Cell,其中一个使用自己的类 NewsFeedCell。此单元格包含一个显示图片的垂直 UIScrollView。我希望用户在单击该行时触发带有图片的 VC 转场。我在 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 给我一个错误,说 Instance member "currentPage"cannot be used on type "NewsFeedCell"。
我尝试在 NewsFeedCell 的代码中将 currentPage 的值打印到控制台,它成功了。
顺便说一句,该变量在 NewsFeedCell 内声明,并在 awakeFromnNib() 下将其第一个值分配给 0,第二次下:
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView){
currentPage = Int(floor((scrollView.contentOffset.x - cellWidth / 2) / cellWidth)) + 1
print(currentPage)
}
请帮忙!
最佳答案
这听起来像是您将 currentPage
创建为实例变量,这意味着 NewsFeedCell
类型的每个对象都有自己的版本。要访问它,您必须引用一个单独的 NewsFeedCell
,如下所示:
var myCell = NewsFeedCell()
print(myCell.currentPage)
它的值对于每个单元格都是不同的。如果您希望所有 NewsFeedCell
都只有一个 currentPage
,您可以将其声明为静态的,如下所示(在 NewsFeedCell 类中):
static var currentPage: Int = 0
然后您可以像以前一样使用 NewsFeedCell.currentPage
访问它。
您能够从 NewsFeedCell
内的函数print(currentPage)
的原因是该函数是一个实例方法。每个实例都有自己的副本,它会打印调用该方法的特定实例的 currentPage。
我不太清楚你到底想用 currentPage
做什么,所以我不确定你是想要静态变量还是实例变量。一般来说,如果您希望有一个可以从任何地方访问的变量版本,请将其设为静态。如果您希望每个单元格都有自己的值,请将其设置为常规实例变量。
关于ios - 从 UITableCellView 和 UITableView 传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43959218/