我对编码非常陌生,我只知道Swift。我发现了一些教程可以在表格中生成下拉部分。基本上它将代表电视节目,标题将是季节以及每个季节的情节下拉列表。
我设法从https://github.com/fawazbabu/Accordion_Menu完美地实现了我想要的功能
这一切看起来都不错,但是我需要能够从下拉菜单中进行选择。我添加didSelectRowAtIndexPath的只是行的简单打印。当我选择行,节或单元格时,将返回随机索引路径,可以再次按下同一行并返回不同的值。我认为这只是我添加到该问题中的内容。所以我添加didSelectRowAtIndexPath了原始代码。这有同样的问题。
didSelectRowAtIndexPath
我认为这是因为UIGestureRecogniser正在使用a 和didSelectRowAtIndexPath。但是我不确定替代方案是什么。
UIGestureRecogniser
有人可以告诉我我要去哪里了吗?
import UIKit import Foundation class test: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet var tableView: UITableView! var sectionTitleArray : NSMutableArray = NSMutableArray() var sectionContentDict : NSMutableDictionary = NSMutableDictionary() var arrayForBool : NSMutableArray = NSMutableArray() override func awakeFromNib() { super.awakeFromNib() tableView.delegate = self tableView.dataSource = self arrayForBool = ["0","0"] sectionTitleArray = ["Pool A","Pool B"] var tmp1 : NSArray = ["New Zealand","Australia","Bangladesh","Sri Lanka"] var string1 = sectionTitleArray .objectAtIndex(0) as? String [sectionContentDict .setValue(tmp1, forKey:string1! )] var tmp2 : NSArray = ["India","South Africa","UAE","Pakistan"] string1 = sectionTitleArray .objectAtIndex(1) as? String [sectionContentDict .setValue(tmp2, forKey:string1! )] self.tableView.registerNib(UINib(nibName: "CategoryNameTableCell", bundle: NSBundle.mainBundle()), forCellReuseIdentifier: "CategoryNameTableCell") } func numberOfSectionsInTableView(tableView: UITableView) -> Int { return sectionTitleArray.count } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ if(arrayForBool .objectAtIndex(section).boolValue == true){ var tps = sectionTitleArray.objectAtIndex(section) as! String var count1 = (sectionContentDict.valueForKey(tps)) as! NSArray return count1.count } return 0; } func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return "ABC" } func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 50 } func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { return 0 } func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { if(arrayForBool .objectAtIndex(indexPath.section).boolValue == true){ return 50 } return 2; } func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let cell = self.tableView.dequeueReusableCellWithIdentifier("CategoryNameTableCell") as! CategoryNameTableCell cell.downArrow.hidden = false cell.backgroundColor = UIColor.blackColor() cell.tag = section cell.CategoryLabel.text = sectionTitleArray.objectAtIndex(section) as? String let cellTapped = UITapGestureRecognizer (target: self, action:"sectionHeaderTapped:") cell .addGestureRecognizer(cellTapped) return cell } func sectionHeaderTapped(recognizer: UITapGestureRecognizer) { println("Tapping working") println(recognizer.view?.tag) var indexPath : NSIndexPath = NSIndexPath(forRow: 0, inSection:(recognizer.view?.tag as Int!)!) if (indexPath.row == 0) { var collapsed = arrayForBool .objectAtIndex(indexPath.section).boolValue collapsed = !collapsed; arrayForBool .replaceObjectAtIndex(indexPath.section, withObject: collapsed) var range = NSMakeRange(indexPath.section, 1) var sectionToReload = NSIndexSet(indexesInRange: range) self.tableView .reloadSections(sectionToReload, withRowAnimation:UITableViewRowAnimation.Fade) tableView.reloadData() } } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ let cell = self.tableView.dequeueReusableCellWithIdentifier("CategoryNameTableCell") as! CategoryNameTableCell var manyCells : Bool = arrayForBool .objectAtIndex(indexPath.section).boolValue if (!manyCells) { } else { var content = sectionContentDict .valueForKey(sectionTitleArray.objectAtIndex(indexPath.section) as! String) as! NSArray cell.CategoryLabel.text = content .objectAtIndex(indexPath.row) as? String cell.backgroundColor = UIColor( red: 49/255, green: 46/255, blue:47/255, alpha: 1.0 ) } return cell } func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { println(indexPath.row) }
我不知道为什么您需要一些部分来完成您想要的事情,您可以使用普通单元格来实现,而无需复杂化。您只需要区分子单元的父单元即可。
我在Github中有一个存储库,可以实现您想要的,而无需使用section UITapGestureRecognizer。我将尽快尝试将项目更新为更好的性能,并在下拉菜单中增加深度层次。
UITapGestureRecognizer
您可以访问它AccordionMenu ,并随时发布您需要的任何内容。
希望对您有所帮助。