2

我创建了一个自定义单元格来替换UITableViewSectionHeader一个协议来处理何时UISegmentedControl.index更改,这样我就可以按名称或值对表进行排序:

自定义单元格

import UIKit
protocol OrdenarTableViewDelegate {
func ordenarTableView(cell: OrdenarTableViewCell)
}
class OrdenarTableViewCell: UITableViewCell {
var delegate: OrdenarTableViewDelegate?
@IBOutlet weak var segmentedOrdenar: UISegmentedControl!
@IBAction func alteraOrdenacao(sender: UISegmentedControl) {
    delegate?.ordenarTableView(self)
}

在 UITableViewControler 我引用了协议

class SelecionadasTableViewController: UITableViewController, UITextFieldDelegate, OrdenarTableViewDelegate {

并实施它:

    // MARK: - Ordenar Delegate
func ordenarTableView(cell: OrdenarTableViewCell) {
    if cell.segmentedOrdenar.selectedSegmentIndex == 0 {
        listaCervejas = bancoDeDados.selecionaCervejas(false)
    } else {
        listaCervejas = bancoDeDados.selecionaCervejas(true)
    }
    ordenarCervejas = cell.segmentedOrdenar.selectedSegmentIndex
    tableView.reloadData()
}

When I select the index 1, the app works just fine, but when index 0 is selected the action is only performed if click on a UITextFieldon any other cell or I pull the table down for refreshing (which by the way is not implemented to refresh )

有什么我想念的吗?因为感觉真的很尴尬。


我注意到只有当我单击一个选项,然后单击另一个选项UISegmentedControl而不触摸屏幕上的其他任何地方时才会出现问题...

4

4 回答 4

1

你可以创建一个自定义视图来替换 tableHeaderView,试试看。

于 2016-12-01T02:35:37.097 回答
0

当您重新加载 tableview 时,添加到 table view 的所有内容都将被重新加载。每次检查选定的段索引并在重新加载表后重置它。

于 2016-05-05T07:55:18.883 回答
0

我怀疑单元格的更新没有执行。reloadTable 是否在 mainThread 上执行?

在 CellForRowAtIndexPath 中包含打印日志语句以找出答案。

于 2016-11-27T07:41:20.463 回答
0

我实际上找到了解决方案。您可以改为将 IBAction 拖动到 tableViewController。然后它工作得很好!谢谢大家的帮助。

于 2019-05-01T20:11:03.937 回答