以前我有一個問題,在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!這使得很多的意義..是否有一些方法只重新加載特定的部分? –
更好的使用標誌來保存段的當前狀態,並在初始化時使用該標誌來設置段的狀態。 –