2016-01-02 5 views
2

У меня проблема с функцией делегирования didDeselectRowAtIndexPath. как когда я выбираю в первый раз, didDeselectRowAtIndexPath не вызывается.uiTableView выбрать предыдущую выбранную строку?

но когда я выбираю другую ячейку, вызывается didDeselectRowAtIndexPath, но с указателем для предыдущего выбора.

давайте рассмотрим пример:

  1. я выбрал строку с индексом 5. так что ничего не будет случилось.
  2. я выбрал строку с индексом 12, то didDeselectRowAtIndexPath будет вызываться с indexPath.row = 5.

Я не знаю почему это случилось, вот мой код: благодаря

class testUICollectionView: UIViewController ,UITableViewDelegate,UITableViewDataSource { 

    let tableItems :NSMutableArray = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5", 
     "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", 
     "Item 12", "Item 13", "Item 14", "Item 15","Item 12", "Item 13", "Item 14", "Item 15","Item 12", "Item 13", "Item 14", "Item 15"] 

    var tableView:UITableView!; 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.view.backgroundColor = UIColor.blueColor(); 

     tableView = UITableView(); 
     tableView.frame = self.view.frame; 
     tableView.registerClass(TableViewCell.self, forCellReuseIdentifier: "Cell"); 
     tableView.dataSource = self; 
     tableView.delegate = self; 
     self.view.addSubview(tableView) 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // Return the number of rows in the section. 
     return tableItems.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell 
     cell.setTextLabel(tableItems[indexPath.row] as! String); 

     return cell 
    } 

    func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
     print("inexPath.row : " + String(indexPath.row)); 
    } 
} 


////////////////////////// table view cell 
class TableViewCell:UITableViewCell{ 

    var label:UILabel!; 

    func setTextLabel(new_text:String){ 

     if (label == nil){ 
      label = UILabel(); 
      label.frame = self.contentView.frame; 
      label.textColor = UIColor.whiteColor(); 
      label.backgroundColor = UIColor.whiteColor(); 
      label.textColor = UIColor.blackColor(); 
      self.contentView.addSubview(label); 
     } 

     label.text = new_text; 
    } 
} 
+0

Даже у меня такая же проблема с вашим кодом. – satheeshwaran

ответ

2

Одновременно можно выбрать только одну ячейку. Когда вы выбираете другую ячейку, ячейка, которую вы выбрали до этого, будет отменена по умолчанию. Вот почему didDeselectRowAtIndexPath: вызывается с предыдущим indexPath

6

Я думаю, ваша проблема в том, что вы используете «didDeselectRowAtIndexPath» (сделал De selectRowAtIndexPath) в то время как вы хотели использовать «didSelectRowAtIndexPath».

+0

О да, это правильно, я этого не заметил. Спасибо за ваш ответ. – david

+0

U мой друг - гений! – user523234

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