2015-11-25 2 views
0
  1. Это функция, которая повторяется для каждой ячейки в TableView. Как вы можете видеть, что im передаёт массив изображений (называемых imageset) внутри объекта Product. productImages - это массив продукта. Внутри этого объекта мы имеем имя, цену и изображение.Изображения не загружены в UITableViewCell Swift

    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, где будет загружена информация о продукте видели и показано. Обратите внимание, что Im использует ScrollView для прокрутки изображений (я взял код из вопроса в stackoverflow) PageImages - это переменная, которая должна иметь переданный образ.

    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. ПРОБЛЕМА - название и цена товара. Изображения не. Когда я отлаживаю это, похоже, что PageImages пуст, когда работает awakeFromNib(), но когда я отлаживаю метод cellForARowAtIndexPath, var PageImages загружается с помощью imageSet в этом indexPath.row. Благодаря

+0

Добро пожаловать на SO, No один будет проходить через весь этот код. Можете ли вы изменить свой код до соответствующих частей? – Mika

ответ

0

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

Спасибо! Я пробовал с didSet и отлично работал – Diego

Смежные вопросы