gpt4 book ai didi

ios - 图像未加载到 UITableViewCell Swift 中

转载 作者:行者123 更新时间:2023-11-30 13:53:49 25 4
gpt4 key购买 nike

  1. 这是对 TableView 中的每个单元格重复执行的函数。正如您所看到的,我在名为 Product 的对象内传递了一个图像数组(称为图像集)。ProductImages 是一个 Product 数组。在这个对象中,我们有名称、价格和图像集。

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("productCell", forIndexPath: indexPath) as! ProductHomeCell

    cell.productName.text = productImages[indexPath.row].name
    cell.productPrice.text = "\(productImages[indexPath.row].price)"

    //cell.PageImages contains Array of Images
    cell.pageImages = productImages[indexPath.row].imageSet

    return cell
    }
  2. 现在我们将设置自定义 UITableViewCell,其中将加载并显示所看到的产品信息。注意我使用 ScrollView 滚动图像。(我从 stackoverflow 中的一个问题中获取了代码)PageImages 是应该传递 imageSet 的变量。

    var pageImages: [UIImage] = []

    var pageViews: [UIImageView?] = []
    var pageControl : UIPageControl = UIPageControl(frame: CGRectMake(60, 300, 195, 5))


    override func awakeFromNib() {


    super.awakeFromNib()
    scrollView.delegate = self
    pageControl = UIPageControl(frame: CGRectMake(230, 14, 107, 37))

    //PageImages should be loaded.
    let pageCount = pageImages.count
    self.pageControl.numberOfPages = pageCount
    configurePageControl()
    pageControl.enabled = false

    // 3
    for _ in 0..<pageCount {
    pageViews.append(nil)
    }

    // 4
    let pagesScrollViewSize = scrollView.frame.size


    scrollView.contentSize = CGSize(width: pagesScrollViewSize.width * CGFloat(pageImages.count),
    height: pagesScrollViewSize.height)


    loadVisiblePages()

    }

    func loadPage(page: Int) {
    if page < 0 || page >= pageImages.count {
    // If it's outside the range of what you have to display, then do nothing
    return
    }

    // 1
    if let pageView = pageViews[page] {
    // Do nothing. The view is already loaded.
    } else {
    // 2
    var frame = scrollView.bounds
    frame.origin.x = frame.size.width * CGFloat(page)
    frame.origin.y = 0.0

    // 3
    let newPageView = UIImageView(image: pageImages[page])
    // let newPageView = UIImageView(image: imageC)

    newPageView.contentMode = .ScaleAspectFit
    newPageView.frame = frame
    scrollView.addSubview(newPageView)

    // 4
    pageViews[page] = newPageView
    }
    }

    func loadVisiblePages() {
    // First, determine which page is currently visible
    let pageWidth = scrollView.frame.size.width
    let page = Int(floor((scrollView.contentOffset.x * 2.0 + pageWidth) / (pageWidth * 2.0)))

    // Work out which pages you want to load
    let firstPage = page - 1
    let lastPage = page + 1

    // Purge anything before the first page
    for var index = 0; index < firstPage; ++index {
    purgePage(index)
    }

    // Load pages in our range
    for index in firstPage...lastPage {
    loadPage(index)
    }

    // Purge anything after the last page
    for var index = lastPage+1; index < pageImages.count; ++index {
    purgePage(index)
    }
    }

    func scrollViewDidScroll(scrollView: UIScrollView) {
    // Load the pages that are now on screen
    loadVisiblePages()
    }

    func purgePage(page: Int) {
    if page < 0 || page >= pageImages.count{
    // If it's outside the range of what you have to display, then do nothing
    return
    }

    // Remove a page from the scroll view and reset the container array
    if let pageView = pageViews[page] {
    pageView.removeFromSuperview()
    pageViews[page] = nil
    }
    }

    override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
    }


    func configurePageControl() {

    self.pageControl.currentPage = 0
    self.pageControl.tintColor = UIColor.blackColor()

    self.pageControl.pageIndicatorTintColor = UIColor.lightGrayColor()
    self.pageControl.currentPageIndicatorTintColor = UIColor.blackColor()
    self.addSubview(pageControl)
    }

    func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
    let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
    pageControl.currentPage = Int(pageNumber)
    }
  3. 问题 - 产品名称和价格加载完美。图像没有。当我调试时,当 awakeFromNib() 运行时,PageImages 看起来是空的,但是当我在 cellForARowAtIndexPath 方法中调试时,var PageImages 会在该 indexPath.row 处加载 imageSet。谢谢

最佳答案

awakeFromNibdequeue... 返回单元格之前执行,因此尝试在那里设置页面是行不通的。我见过的两种方法要么有一种显式设置单元的方法:

func setupCell(productName:String, productPrice:Double, images:[UIImage]) {
// Do most of what you have in awakeFromNib here
}

或者在属性的 didSet 中执行此操作:

var pageImages : [UIImage] = [] {
didSet {
// Set up your page controller here.
}
}

关于ios - 图像未加载到 UITableViewCell Swift 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33921522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com