我有一个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)

它的值对于每个细胞都是不同的。如果希望所有NewsFeedCells都只有一个currentPage,则将其声明为静态,如下所示(在NewsFeedCell类中):
static var currentPage: Int = 0

然后您可以像以前一样使用NewsFeedCell访问它。
您之所以能够从NewsFeedCell.currentPage中的函数print(currentPage)中调用,是因为该函数是一个实例方法。每个实例都有自己的副本,它为调用该方法的特定实例打印当前页。
我不太清楚你到底想用NewsFeedCell做什么,所以我不确定你是想要一个静态变量还是一个实例变量。一般来说,如果您希望变量有一个可以从任何地方访问的单一版本,请将其设为静态。如果希望每个单元格都有自己的值,请将其设置为常规实例变量。

关于ios - 从UITableCellView和UITableView传输数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43959218/

10-09 16:16