以前我有一个问题,在tableview节标题单元格中有一个UISegmentedControl,我想在主视图控制器中监听值更改。UISegmentedControl在值更改时不选择
我通过在tableView:viewForHeaderInSection
方法的UISegmentedControl上使用addTarget
解决了这个问题,并且这可以工作。
第一段是默认选择,这是有效的。当点击第二段时,它会用其他数据重新加载tableview,这是预期的行为。但是,第一部分仍然被选中。这意味着我无法切换回表格视图中的原始数据。
Please see this video你会看到我想解释的。
我找不出我的代码出了什么问题?
/*
* Main View Controller
*/
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if section == 0 {
return nil
}
let sectionCell = tableView.dequeueReusableCellWithIdentifier("SegmentCell") as! SegmentTableViewCell
// Add event for the UISegmentedControl
sectionCell.segmentControl.addTarget(self, action: #selector(self.handleSegmentControlEvent), forControlEvents: .ValueChanged)
return sectionCell
}
func handleSegmentControlEvent(sender: UISegmentedControl) {
self.segmentControlIndex = sender.selectedSegmentIndex
switch (sender.selectedSegmentIndex) {
case 0:
if latestTableData.count == 0 {
loadItems("latest")
} else {
tableView.reloadData()
}
break
case 1:
if closestTableData.count == 0 {
loadItems("closest")
} else {
tableView.reloadData()
}
break;
default:
break
}
}
/*
* Segment table view cell
*/
class SegmentTableViewCell: UITableViewCell {
@IBOutlet weak var segmentControl: UISegmentedControl!
override func awakeFromNib() {
super.awakeFromNib()
}
}
我看不到我做错了什么?
如果你重新加载表视图,它也重新加载标题视图。所以分段控制重新初始化为以前的状态。 –
谢谢@SuryaSubenthiran!这使得很多的意义..是否有一些方法只重新加载特定的部分? –
更好的使用标志来保存段的当前状态,并在初始化时使用该标志来设置段的状态。 –