Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 未在UITableViewCell Swift中加载图像_Ios_Swift_Scrollview_Tableviewcell - Fatal编程技术网

Ios 未在UITableViewCell Swift中加载图像

Ios 未在UITableViewCell Swift中加载图像,ios,swift,scrollview,tableviewcell,Ios,Swift,Scrollview,Tableviewcell,这是对TableView中的每个单元格重复的函数。正如您所看到的,im在名为Product的对象中传递一个图像数组(称为imageset)。 productImages是一组产品。在这个对象中,我们有名称、价格和图像集 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.deque

这是对TableView中的每个单元格重复的函数。正如您所看到的,im在名为Product的对象中传递一个图像数组(称为imageset)。 productImages是一组产品。在这个对象中,我们有名称、价格和图像集

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
}
  • 现在,我们将使用定制的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)
    }
    
    var pageImages:[UIImage]=[]
    var页面浏览量:[UIImageView?]=[]
    var pageControl:UIPageControl=UIPageControl(帧:CGRectMake(603001955,5))
    重写func awakeFromNib(){
    super.awakeFromNib()
    scrollView.delegate=self
    pageControl=UIPageControl(帧:CGRectMake(230、14、107、37))
    //应加载页面图像。
    让pageCount=pageImages.count
    self.pageControl.numberOfPages=页面计数
    configurePageControl()
    pageControl.enabled=false
    // 3
    对于0中的u0..=pageImages.count{
    //如果超出了必须显示的范围,则什么也不做
    返回
    }
    // 1
    如果let pageView=pageViews[page]{
    //不执行任何操作。视图已加载。
    }否则{
    // 2
    var frame=scrollView.bounds
    frame.origin.x=frame.size.width*CGFloat(第页)
    frame.origin.y=0.0
    // 3
    让newPageView=UIImageView(图像:pageImages[页面])
    //让newPageView=UIImageView(图像:imageC)
    newPageView.contentMode=.ScaleSpectFit
    newPageView.frame=frame
    scrollView.addSubview(newPageView)
    // 4
    页面浏览量[页面]=新建页面浏览量
    }
    }
    func loadVisiblePages(){
    //首先,确定当前可见的页面
    让pageWidth=scrollView.frame.size.width
    让page=Int(floor((scrollView.contentOffset.x*2.0+pageWidth)/(pageWidth*2.0)))
    //确定要加载的页面
    让firstPage=page-1
    让lastPage=page+1
    //清除第一页之前的任何内容
    对于var index=0;index=pageImages.count{
    //如果超出了必须显示的范围,则什么也不做
    返回
    }
    //从滚动视图中删除页面并重置容器阵列
    如果let pageView=pageViews[page]{
    pageView.removeFromSuperview()
    页面浏览量[页面]=零
    }
    }
    覆盖功能设置选定(选定:布尔,动画:布尔){
    super.setSelected(选定,动画:动画)
    //为所选状态配置视图
    }
    func configurePageControl(){
    self.pageControl.currentPage=0
    self.pageControl.tintColor=UIColor.blackColor()
    self.pageControl.pageIndicatorTintColor=UIColor.lightGrayColor()
    self.pageControl.currentPageIndicatorTintColor=UIColor.blackColor()
    self.addSubview(页面控制)
    }
    func ScrollViewDiEndDecelling(scrollView:UIScrollView){
    让pageNumber=round(scrollView.contentOffset.x/scrollView.frame.size.width)
    pageControl.currentPage=Int(页码)
    }
    
  • 问题-产品名称和价格负载完美。这些图像不适合。当我调试时,当is awakeFromNib()正在运行时,PageImages看起来是空的,但是当我在CellForArrowatineXpath方法中调试时,var PageImages与该indexPath.row处的imageSet一起加载。 谢谢


  • awakeFromNib
    在通过
    dequeue…
    返回单元格之前执行,因此尝试在那里设置页面是行不通的。我见过的两种方法都是使用一种方法来显式设置单元格:

    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.
        }
    }
    

    欢迎来到SO,没有人会阅读所有这些代码。你能把你的代码编辑到相关部分吗?谢谢!我试着用didSet,效果很好