UISegmentedControl 在 UITableView Header 上的行为很奇怪

UISegmentedControl behaves in a weird way on UITableView Header

我创建了一个自定义单元格来替换 UITableViewSectionHeader 并在 UISegmentedControl.index 更改时处理协议,因此我可以按名称或值订购 table:

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()
}

当我 select 索引 1 时,应用程序工作正常,但是当索引 0 被 selected 时,只有在任何其他 UITextField 上单击 UITextField 时才会执行操作单元格或我下拉 table 进行刷新(顺便说一下,它没有实现刷新)

有什么我遗漏的吗?因为感觉真的很别扭。


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

当您重新加载 table 视图时,将重新加载添加到 table 视图的所有内容。每次检查选择的段索引并在 table 重新加载后重置它。

我怀疑没有执行cell的更新。 reloadTable是在mainThread上执行的吗?

在 CellForRowAtIndexPath 中包含打印日志语句以进行查找。

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

我真的找到了解决办法。您可以将 IBAction 拖到 tableViewController 中。然后它工作得很好! 谢谢大家的帮助。