如何在swift中从tableview的每个部分中选择一行?

时间:2016-06-09 16:10:20

标签: ios swift uitableview

我想从同一个表视图的不同部分中选择一行。我正在获取许多行正在选择的输出,但我只想从每个部分中选择一行。

这是我的阵列:

var filterFeedUnderAll = ["Complex","NotComplex","Easy"]
var filterFeedUnderAllStocks = ["AllStocks","Portfolio","Watchlist","Sector","Ticker"]
var filterFeedUnderByDate = ["ByDate","ByComments","ByLikes"]

我使用的方法:

func numberOfSectionsInTableView(tableView: UITableView) -> Int
{
    return 3
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    var count:Int?
    if section == 0
    {
        count = filterFeedUnderAll.count
    }
    else if section == 1
    {
        count = filterFeedUnderAllStocks.count
    }
    else if section == 2
    {
        count = filterFeedUnderByDate.count
    }
    return count!
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = self.m_HomeFeedFilterBaseTableView.dequeueReusableCellWithIdentifier("cell1", forIndexPath: indexPath) as! HomeFeedFIlterBaseTableViewCell
    switch (indexPath.section)
    {
    case 0:
        cell.m_TableItemsLabel.text = filterFeedUnderAll[indexPath.row]
    case 1:
        cell.m_TableItemsLabel.text = self.filterFeedUnderAllStocks[indexPath.row]
    case 2:
        cell.m_TableItemsLabel.text = filterFeedUnderByDate[indexPath.row]
    default:
        cell.m_TableItemsLabel.text = "Other"
    }
    return cell
}


  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
   {
      let cell = m_HomeFeedFilterBaseTableView.cellForRowAtIndexPath(indexPath) as! HomeFeedFIlterBaseTableViewCell
      for selectedIndexPath: NSIndexPath in tableView.indexPathsForSelectedRows! 
      {
      if selectedIndexPath.section == indexPath.section
      {
      cell.m_TableItemsLabel.textColor = selectedTextColor
      tableView.deselectRowAtIndexPath(indexPath, animated: true)
      }
    }

}

我想从每个部分中选择一行。帮助我完成这项任务。

1 个答案:

答案 0 :(得分:3)

首先,您需要在tableView中启用多项选择,然后这是我过去常用的代码,请注意我使用Dictionary格式[String:NSIndexPath]命名selectedRows我按部分存储一个indexPath,我在addSelectedCellWithSection

中执行此操作
import UIKit

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate {

    @IBOutlet weak var tableView: UITableView!

    var filterFeedUnderAll = ["Complex","NotComplex","Easy"]
    var filterFeedUnderAllStocks = ["AllStocks","Portfolio","Watchlist","Sector","Ticker"]
    var filterFeedUnderByDate = ["ByDate","ByComments","ByLikes"]

    var selectedRows = [String:NSIndexPath]()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func numberOfSectionsInTableView(tableView: UITableView) -> Int
    {
        return 3
    }

    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 50;
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        var count:Int?
        if section == 0
        {
            count = filterFeedUnderAll.count
        }
        else if section == 1
        {
            count = filterFeedUnderAllStocks.count
        }
        else if section == 2
        {
            count = filterFeedUnderByDate.count
        }
        return count!
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        let cell = self.tableView.dequeueReusableCellWithIdentifier("cell1", forIndexPath: indexPath) as! testCell
        switch (indexPath.section)
        {
        case 0:
            cell.lblName.text = filterFeedUnderAll[indexPath.row]
        case 1:
            cell.lblName.text = self.filterFeedUnderAllStocks[indexPath.row]
        case 2:
            cell.lblName.text = filterFeedUnderByDate[indexPath.row]
        default:
            cell.lblName.text = "Other"
        }
        return cell
    }

    func addSelectedCellWithSection(indexPath:NSIndexPath) ->NSIndexPath?
    {
        let existingIndexPath = selectedRows["\(indexPath.section)"];
        if (existingIndexPath == nil) {
            selectedRows["\(indexPath.section)"]=indexPath;
        }else
        {
            selectedRows["\(indexPath.section)"]=indexPath;
            return existingIndexPath
        }

        return nil;
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
    {
        let cell = self.tableView.cellForRowAtIndexPath(indexPath) as! testCell

        let previusSelectedCellIndexPath = self.addSelectedCellWithSection(indexPath);

        if(previusSelectedCellIndexPath != nil)
        {
        let previusSelectedCell = self.tableView.cellForRowAtIndexPath(previusSelectedCellIndexPath!) as! testCell

            previusSelectedCell.lblName.textColor = UIColor.blackColor();
            cell.lblName.textColor = UIColor.redColor()
            tableView.deselectRowAtIndexPath(previusSelectedCellIndexPath!, animated: true);
        }
        else
        {
            cell.lblName.textColor = UIColor.redColor();
        }

    }

}

希望这对你有所帮助,对我来说是完美的