2016-01-14 3 views
0

Я постоянно пытаюсь определить третью ячейку с верхней части таблицы. В принципе, это означает, что третья ячейка сверху будет всегда отличаться от всех остальных (т. Е. Цвет текста изменится и т. Д.). Я полагал, так как клетки повторно, я всегда был бы в состоянии получить доступ к третьей ячейке, как это:TableView Определяет третью ячейку сверху

if (indexPath.row == 2) { 
     
    } 

К сожалению, не похоже, что это будет работать, как это. Когда я иду и печатаю indexPath.row, цифры продолжают увеличиваться полностью от 0 до 12 ... Теперь это понятно, так как это ячейки row, но как я могу получить доступ к третьей строке всегда сверху. Вот оригинальный подход, который я взял:

override func scrollViewDidScroll(scrollView: UIScrollView) { 
     
        let indexPath: NSIndexPath = self.tableView.indexPathsForVisibleRows![0] 
             
        if (indexPath.row == 2) { 
          // Print or whatever 
     
            } 
        } 
    } 

Так как я могу идти о доступе к третьему ряду всегда из верхней части tableView?

Спасибо!

+0

Вы имеете в виду каждые 3,6,9 таких, или 3-го сверху, как 5-е, сверху, а затем 7-е будет третьим, так какая же логика вам нужна? –

+0

@DharmbirSingh Второе объяснение. Таким образом, в основном, можно сказать, что ячейка 5 находится сверху, ячейка 7 будет редактироваться. Если пользователь затем прокручивает еще одну ячейку вниз, поэтому ячейка 6 находится сверху, теперь ячейка 8 изменится. Имеет ли это смысл? Спасибо! –

+0

Пожалуйста, взгляните на мой ответ. –

ответ

3

Вот пример проекта. Я попытался запустить его в симуляторе, и он работает нормально.

Вот скриншот XCode, чтобы вы могли видеть Main.Storyboard.

Screenshot

Video Walkthrough created with licecap

Также здесь является копией кода в ViewController.swift:

import UIKit 

class ViewController: UIViewController, UIScrollViewDelegate, UITableViewDataSource, UITableViewDelegate { 
@IBOutlet weak var tableView: UITableView! 

var indexOfThirdVisible: Int! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.dataSource = self 
    tableView.delegate = self 
    // Do any additional setup after loading the view, typically from a nib. 
    self.navigationController?.navigationBar.barStyle = .BlackTranslucent 
    self.navigationController?.navigationBar.tintColor = UIColor.orangeColor() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


func scrollViewDidScroll(scrollView: UIScrollView) { 

    let indexPath = self.tableView.indexPathsForVisibleRows![0] 
    indexOfThirdVisible = indexPath.row + 2 
    let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: indexOfThirdVisible, inSection: indexPath.section)) as! TableViewCell 
    cell.label.textColor = UIColor.orangeColor() 

    let cellAbove = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: indexOfThirdVisible - 1, inSection: indexPath.section)) as! TableViewCell 
    let cellBelow = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: indexOfThirdVisible + 1, inSection: indexPath.section)) as! TableViewCell 
    cellAbove.label.textColor = UIColor.whiteColor() 
    cellBelow.label.textColor = UIColor.whiteColor() 

} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 100 
} 
// heightForRowAtIndexPath 
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return 100 
} 
// configure cell 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell")! 
    return cell 
} 
} 

Вот TableViewCell.swift:

import UIKit 

class TableViewCell: UITableViewCell { 

@IBOutlet weak var label: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

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

    // Configure the view for the selected state 
    } 

} 

К сожалению, если отступы испорчены. Имейте хороший день и сообщите мне, если вам нужна дополнительная помощь!

1

Я только что реализовал только логику, вы можете настроить ее немного в соответствии с вами.

func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) { 
    let indexPath : NSIndexPath = (tv.indexPathsForVisibleRows as! NSArray).objectAtIndex(0) as! NSIndexPath 

    let thirdRow = indexPath.row + 2 
    if thirdRow <= dataArr.count{// dataArr is your no of rows 

     let thirdIndexPath = NSIndexPath(forRow: thirdRow, inSection: 0) 

     let cell = tv.cellForRowAtIndexPath(thirdIndexPath) 
     // ---- here you can perform any task with third cell---- 

    } 
} 

И, пожалуйста, дайте мне знать, если что-то не так

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