uiTableView选择上一个选定的行?

时间:2016-01-02 10:33:05

标签: ios swift uitableview ios9

我遇到didDeselectRowAtIndexPath委托功能问题。 当我第一次选择时,didDeselectRowAtIndexPath没有被调用。

但是当我选择另一个单元格时,会调用didDeselectRowAtIndexPath但是具有上一个选择的索引路径。

让我们举个例子:

  1. 我在索引5处选择了行。所以什么都不会发生。
  2. 我已在索引12处选择了行,然后将使用indexPath.row = 5调用didDeselectRowAtIndexPath
  3. 我不知道为什么会这样,这是我的代码:谢谢

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

2 个答案:

答案 0 :(得分:7)

我认为你的问题是你使用" didDeselectRowAtIndexPath" (当你想使用" didSelectRowAtIndexPath"时, De selectRowAtIndexPath)。

答案 1 :(得分:3)

只能同时选择一个单元格。当您选择另一个单元格时,默认情况下将取消选择之前选择的单元格。这就是使用之前的didDeselectRowAtIndexPath:

调用indexPath的原因