UISegmentedControl 在 UITableView Header 上的行为很奇怪
Posted
技术标签:
【中文标题】UISegmentedControl 在 UITableView Header 上的行为很奇怪【英文标题】:UISegmentedControl behaves in a weird way on UITableView Header 【发布时间】:2016-05-05 03:08:51 【问题描述】:我创建了一个自定义单元格来替换 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 UITextField
on any other cell or I pull the table down for refreshing (which by the方式未实现刷新)
我有什么遗漏的吗?因为感觉真的很尴尬。
我注意到只有当我在UISegmentedControl
上单击一个选项,然后单击另一个选项而不触摸屏幕上的其他任何位置时才会出现此问题...
【问题讨论】:
请添加您所有的 Tableview 数据源代码。 我建议您改用 UIViewController,添加一个视图,让您的分段控件位于 tableview 上方。确保将委托和数据源设置为控制器,并且控制器符合 tableview 数据源和委托。减少头痛 【参考方案1】:你可以创建一个自定义视图来替换tableHeaderView,试试吧。
【讨论】:
【参考方案2】:当您重新加载 tableview 时,添加到 table view 的所有内容都将被重新加载。每次检查选定的段索引,并在重新加载表后重新设置。
【讨论】:
这就是我正在做的事情,但是 Selected 索引仅在您拉动 tableview 时发生变化,而不是在您单击分段控件时...【参考方案3】:我怀疑单元格的更新没有执行。 reloadTable 是在 mainThread 上执行的吗?
在 CellForRowAtIndexPath 中包含打印日志语句以查找。
【讨论】:
【参考方案4】:我实际上找到了解决方案。您可以改为将 IBAction 拖动到 tableViewController。然后它工作得很好! 谢谢大家的帮助。
【讨论】:
以上是关于UISegmentedControl 在 UITableView Header 上的行为很奇怪的主要内容,如果未能解决你的问题,请参考以下文章
UISegmentedControl - 在界面生成器中改变高度