2015-04-20 3 views
1

Я пытаюсь добавить UIScrollView() в одну из ячеек таблицы. У меня возникают трудности с выяснением того, какие методы ставят код для просмотра прокрутки.UIScrollView в UITableViewCell в Swift

У меня есть мнение прокрутки в другом месте в моем приложении, и это код, который я использовал перемещаемый через к моим UITableView() зрению, как я предположил, что это должно быть:

var page = Int() 
var pageViews: [UIImageView?] = [] 
var sixPlusImages = [ 
    UIImage(named: "Glance 5.5"), 
    UIImage(named: "Currencies 5.5"), 
    UIImage(named: "Swipe 5.5"), 
    UIImage(named: "Format 5.5"), 
    UIImage(named: "Search 5.5") 
] 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell:AppImagesTableViewCell = self.appTableView.dequeueReusableCellWithIdentifier("appImages", forIndexPath: indexPath) as! AppImagesTableViewCell 

    return cell 
} 

func loadPage(page: Int) { 
    let cell = appTableView.cellForRowAtIndexPath(NSIndexPath(index: 0)) 

    if page < 0 || page >= pageViews.count { 
     return 
    } 

    if let pageView = pageViews[page] { 
     return 
    } else { 
     var imageFrame = CGRect(x: (cell.scrollView.bounds.width * CGFloat(page)) + 5, y: 0, width: (cell.scrollView.bounds.width) - 10, height: 40) 

     let imageView = UIImageView() 
     imageView.contentMode = .ScaleAspectFit 
     imageView.frame = imageFrame 
     imageView.image = sixPlusImages[page] 
     cell.scrollView.addSubview(imageView) 
    } 

    pageViews[page] = imageView 
} 

func purgePage(page: Int) { 
    if page < 0 || page >= sixPlusImages.count { 
     return 
    } 

    if let pageView = pageViews[page] { 
     pageView.removeFromSuperview() 
     pageViews[page] = nil 
    } 
} 

func loadVisiblePages() { 
    let pageWidth = cell.scrollView.frame.size.width 
    page = Int(floor((cell.scrollView.contentOffset.x * 2.0 + pageWidth)/(pageWidth * 2.0))) 

    pageControl.currentPage = page 

    let firstPage = page - 1 
    let lastPage = page + 1 

    for var index = 0; index < firstPage; ++index { 
     purgePage(index) 
    } 

    for index in firstPage...lastPage { 
     loadPage(index) 
    } 

    for var index = lastPage+1; index < sixPlusImages.count; ++index { 
     purgePage(index) 
    } 
} 

func scrollViewDidScroll(scrollView: UIScrollView) { 
    loadVisiblePages() 
} 

Очевидно, что существует немало проблем с Это. Кажется, я не могу получить доступ к scrollView, который у меня есть как выход в классе ячеек, что вызывает некоторые проблемы.

Может ли кто-нибудь дать мне руководство? Я не вижу никаких быстрых примеров в Интернете.

Спасибо.

ответ

2

Я заметил, что вы используете часть кода, предложенную в учебных пособиях, в UIScrollView Tutorial: Getting Started, чтобы сделать слайд-шоу, используя UIScrollView.

Вы можете использовать UIScrollView внутри вас обычай UITableViewCell без каких-либо проблем, в первую очередь вы должны объявить @IBOutlet внутри CustomTableViewCell.

Класс CustomTableViewCell должен реализовать протокол UIScrollViewDelegate быть уведомлен его об изменениях в UIScrollView, вы должны реализовать функции для обработки UIScrollView внутри него. Давайте рассмотрим в следующем примере:

CustomTableViewCell обрабатывать UIScrollView

class CustomTableViewCell: UITableViewCell, UIScrollViewDelegate { 


    @IBOutlet weak var scrollView: UIScrollView! 

    var pageImages: [UIImage] = [] 
    var pageViews: [UIImageView?] = [] 


    override func awakeFromNib() { 
     super.awakeFromNib()   

     // 1 
     pageImages = [UIImage(named: "photo1.jpg")!, 
     UIImage(named: "photo2.jpg")!, 
     UIImage(named: "photo3.jpg")!]    

     let pageCount = pageImages.count  

     // 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) 

     // 5 
     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]) 
      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 
    } 
} 

Затем в cellForRowAtIndexPath в вашем UITableViewController или ViewController единственное, что вам нужно, это следующий код:

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

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomTableViewCell   

    return cell 
} 

abo ve code это только, например, вы должны учитывать ограничения для UIScrollView, включить пейджинговую поддержку и т. д.

Я надеюсь, что это поможет вам.

+0

Спасибо! Я пробовал этот код (очевидно, сначала меняя переменные на свои), и он компилируется, но ничего не отображается в таблице. Просто пустая ячейка. – user3746428

+0

Я могу поделиться проектом, если вы этого хотите, по github –

+0

У вас есть собственные изображения? –

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