Раньше у меня была проблема с ячейкой заголовка раздела UISegmentedControl в tableview, и я хотел прослушать изменения значений в главном контроллере представления.UISegmentedControl не выбирает, когда изменяется значение
Я получил это решение, используя addTarget
в UISegmentedControl в методе tableView:viewForHeaderInSection
, и это работает.
Первый сегмент по умолчанию выбран, и это работает. При нажатии второго сегмента он перезагружает таблицу с другими данными, что является ожидаемым поведением. Однако первый сегмент все еще выбран. Это означает, что я не могу вернуться к исходным данным в виде таблицы.
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! Это делает много смысла. Есть ли какой-то метод только для перезагрузки определенного раздела? –
лучше использовать флаг для хранения текущего состояния сегмента и использовать флаг для установки состояния сегмента при инициализации. –