我需要包含两个按钮,一个按字母顺序排序菜单,另一个按钮保留正常选项。
我创建了按钮并创建了事件,但是当我点击单元格时,即使使用self.tableview.reloadData()
也未对其进行排序。
你知道我能做到这一点吗?
P.S:我正在使用nib / xib文件
以下代码:
import UIKit
class ExpandableTableViewViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var selectedCellIndexPath: NSIndexPath?
////Heigh for cell in subTableView
// Para pessoas que falam a língua portuguesa -> Tamanho da célula da tabela (principal e subs)
let selectedCellHeightForSubTable: CGFloat = 40.0
///Heigh for cell in Main Table in (unselected)
//Para pessoas que falam a língua portuguesa -> Tamanho da célula quando não escolhida
let unselectedCellHeight: CGFloat = 110.0
////Array to save references for SubTables
//Para pessoas que falam a língua portuguesa -> Neste array são salvas as referências para as subtabelas
var subTables:[UITableView] = [UITableView]();
///fake data /// tuples type
// Para pessoas que falam a língua portuguesa -> Aqui são instanciados os vetores que serão utilizados
// na instanciação das células principais que serão utilizadas no armazenamento das células que irão compor
// as tabelas e a subtabelas
var data:([String],[[String]],[[String]],[[String]])=([String](),[[String]](),[[String]](),[[String]()]);
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRect(x: 25, y: 25, width: 70, height: 50))
button.backgroundColor = .greenColor()
button.setTitle("Ordena", forState: .Normal)
button.addTarget(self, action: #selector(buttonAction), forControlEvents: .TouchUpInside)
self.view.addSubview(button)
///Register Nib file for Main Cells
// Para pessoas que falam a língua portuguesa -> Aqui eu faço o registro dos arquivos nib que representam
// as células principais
tableView.registerNib(UINib(nibName: "ExpandableCellTableViewCell",bundle: nil), forCellReuseIdentifier: "cell");
////Initialize array with fake data
// Para pessoas que falam a língua portuguesa -> Aqui eu tenho a presença do método InitialiDataArray()
// que realiza a instanciação dos vetores das células principais e secundárias.
self.data = self.InitializeDataArray()
self.tableView.reloadData();
}
func buttonAction(sender: UIButton!) {
self.data = self.InitializeDataArraySort()
self.tableView.reloadData()
}
// Para pessoas que falam a língua portuguesa -> Retorna o número de seções na TableView
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1;
}
// Para pessoas que falam a língua portuguesa -> Ajusta as células da TableView nas subtabelas
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
///Main table
if tableView == self.tableView{
return data.0.count;
}else{
if let index = self.subTables.indexOf(tableView) {
return data.1[index].count+1;///+1 for Header cell in subtableView
}
return 0;
}
}
// Para pessoas que falam a língua portuguesa -> Ajuste das células presentes nas linhas (subtabelas)
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if tableView == self.tableView {
if selectedCellIndexPath == indexPath {
////unselected Heigh + heigh for every cell in subtable
return unselectedCellHeight+selectedCellHeightForSubTable*CGFloat(self.data.1[indexPath.row].count+1)
}
return unselectedCellHeight
}else{
return selectedCellHeightForSubTable
}
}
// Para pessoas que falam a língua portuguesa -> Processo de seleção das células e inclusão dos efeitos
// de expandir e colapsar.
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if tableView == self.tableView {
if selectedCellIndexPath != nil && selectedCellIndexPath == indexPath {
let cell = self.tableView.cellForRowAtIndexPath(indexPath) as! ExpandableCellTableViewCell;
//let cell2 = self.tableView.cellForRowAtIndexPath(indexPath)!
//let textoo = (cell2.viewWithTag(4) as! UILabel).text
// print("Yuri 2")
// print(textoo)
cell.directionImageView.image = UIImage(named: "down");
tableView.cellForRowAtIndexPath(indexPath)?.viewWithTag(3)!.hidden = true;
selectedCellIndexPath = nil
} else {
selectedCellIndexPath = indexPath
let cell = self.tableView.cellForRowAtIndexPath(indexPath) as! ExpandableCellTableViewCell;
cell.directionImageView.image = UIImage(named: "up");
tableView.cellForRowAtIndexPath(indexPath)?.viewWithTag(3)!.hidden = false;
}
tableView.beginUpdates()
tableView.endUpdates()
if selectedCellIndexPath != nil {
// This ensures, that the cell is fully visible once expanded
tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .None, animated: true)
}
}
}
// Para pessoas que falam a língua portuguesa -> Efeitos de expansão e colapso quando a célula não foi
//selecionada
func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
if self.tableView.isEqual(tableView){
let cell = self.tableView.cellForRowAtIndexPath(indexPath) as! ExpandableCellTableViewCell;
cell.directionImageView.image = UIImage(named: "down");
cell.viewWithTag(3)!.hidden = true;
}
}
// Para pessoas que falam a língua portuguesa -> Preenchimento do conteúdo dos vetores nas células principais
// e secundárias
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:UITableViewCell=UITableViewCell();
if tableView == self.tableView{
cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
as! ExpandableCellTableViewCell;
(cell.viewWithTag(1) as! UILabel).text = self.data.0[indexPath.row]
let subtable = cell.viewWithTag(3) as! UITableView;
subtable.delegate = self;
subtable.dataSource = self;
subtable.registerNib(UINib(nibName: "SubTableCellTableViewCell",bundle: nil), forCellReuseIdentifier: "sub_cell");
self.subTables.append(subtable);
subtable.reloadData();
}else{
cell = tableView.dequeueReusableCellWithIdentifier("sub_cell", forIndexPath: indexPath)
print(indexPath.row)
print(indexPath.section)
if indexPath.row>0{
if let index = self.subTables.indexOf(tableView) {
(cell.viewWithTag(1) as! UILabel).text = self.data.1[index][indexPath.row-1]
(cell.viewWithTag(2) as! UILabel).text = self.data.2[index][indexPath.row-1]
(cell.viewWithTag(3) as! UILabel).text = self.data.3[index][indexPath.row-1]
// let texto = (cell.viewWithTag(1) as! UILabel).text
// print(texto)
}
}
}
// if("verdade".isEqualToString("verdade"))
//{
// print("Entrei")
//}
cell.selectionStyle = .None
// let tex = (cell.viewWithTag(1) as! UILabel).text
// print("Yuri")
// print(tex)
return cell;
}
// Para pessoas que falam a língua portuguesa -> Declaração do conteúdo das células principais e
// secundárias
public func InitializeDataArray()->([String],[[String]],[[String]],[[String]]){
var mainCells = [String]();
var col1_SubCells = [[String]]();
var col2_SubCells = [[String]]();
var col3_SubCells = [[String]]();
////Expandable Cells Data
mainCells.append("Genesis");
mainCells.append("Exodus");
mainCells.append("Leviticus");
mainCells.append("Numbers");
// mainCells.append("Cell 5");
////First Main cell data
///First Col////////
var tempArr:[String] = [String]();
tempArr.append("Chapters")
tempArr.append("Gen 3")
tempArr.append("Gen 6")
tempArr.append("Gen 9")
col1_SubCells.append(tempArr);
///2nd Col
tempArr = [String]();
tempArr.append("")
tempArr.append("Gen 2")
tempArr.append("Gen 5")
tempArr.append("Gen 8")
col2_SubCells.append(tempArr);
///3rd Col
tempArr = [String]();
tempArr.append("")
tempArr.append("Gen 1")
tempArr.append("Gen 4")
tempArr.append("Gen 7")
col3_SubCells.append(tempArr);
////2nd Main cell data////////
///First Col
tempArr = [String]();
tempArr.append("Chapters")
tempArr.append("Exo 3")
tempArr.append("Exo 6")
tempArr.append("Exo 9")
col1_SubCells.append(tempArr);
///2nd Col
tempArr = [String]();
tempArr.append("")
tempArr.append("Exo 2")
tempArr.append("Exo 5")
tempArr.append("Exo 8")
col2_SubCells.append(tempArr);
///3rd Col
tempArr = [String]();
tempArr.append("")
tempArr.append("Exo 1")
tempArr.append("Exo 4")
tempArr.append("Exo 7")
col3_SubCells.append(tempArr);
////3rd Main cell data////////
///First Col
tempArr = [String]();
tempArr.append("Chapters")
tempArr.append("Lev 3")
tempArr.append("Lev 6")
tempArr.append("Lev 9")
col1_SubCells.append(tempArr);
///2nd Col
tempArr = [String]();
tempArr.append("")
tempArr.append("Lev 2")
tempArr.append("Lev 5")
tempArr.append("Lev 8")
col2_SubCells.append(tempArr);
///3rd Col
tempArr = [String]();
tempArr.append("")
tempArr.append("Lev 1")
tempArr.append("Lev 4")
tempArr.append("Lev 7")
col3_SubCells.append(tempArr);
////4th Main cell data////////
///First Col
tempArr = [String]();
tempArr.append("Chapters")
tempArr.append("Num 3")
tempArr.append("Num 6")
tempArr.append("Num 9")
col1_SubCells.append(tempArr);
///2nd Col
tempArr = [String]();
tempArr.append("")
tempArr.append("Num 2")
tempArr.append("Num 5")
tempArr.append("Num 8")
tempArr.append("Num 11")
col2_SubCells.append(tempArr);
///3rd Col
tempArr = [String]();
tempArr.append("")
tempArr.append("Num 1")
tempArr.append("Num 4")
tempArr.append("Num 7")
tempArr.append("Num 10")
col3_SubCells.append(tempArr);
return (mainCells,col1_SubCells,col2_SubCells,col3_SubCells);
}
}