UISegmentedControl在UITableView Header上以奇怪的方式运行

时间:2016-05-05 03:08:51

标签: ios swift uitableview uisegmentedcontrol uitableviewsectionheader

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

Custom Cell

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

当我选择索引1时,应用程序工作得很好,但是当选择索引0时,仅在单击任何其他单元格上的UITextField时执行操作,或者我将表拉下来进行刷新(顺便说一句,没有实现刷新)

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

我注意到问题只发生在我点击一个选项然后UISegmentedControl上的另一个选项而没有触及屏幕上的任何其他地方时...

4 个答案:

答案 0 :(得分:0)

重新加载tableview时,将重新加载添加到表视图的所有内容。每次检查选定的段索引,并在表重新加载后重置。

答案 1 :(得分:0)

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

在CellForRowAtIndexPath中包含一个打印日志语句以查找。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我实际上找到了解决方案。您可以将IBAction拖到tableViewController上。然后就可以了!! 谢谢大家的帮助。