当前,我在表格视图的顶部有一个开关,可以更改数据的来源。交换机调用此功能
@objc func controlValueChanged(_sender: BetterSegmentedControl) {
if _sender.index == 0 {
//friend feed
tableView.dataSource = HomeViewController()
tableView.delegate = HomeViewController()
tableView.reloadData()
print("friends")
}
else if _sender.index == 1 {
//school feed
tableView.dataSource = schoolFeedViewController()
tableView.delegate = schoolFeedViewController()
tableView.reloadData()
print("school")
}
}
当我将状态从索引0更改为索引1时,表视图似乎切换了,尽管由于数据源为空,所以没有表视图显示。但是,当我从索引1切换到索引0时,什么也没有发生。控制台日志显示“朋友”,但未显示表视图。
这是schoolFeedViewController()的代码:
class schoolFeedViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var postList = [Post]()
var currentSchool: String?
var currentGrade: String?
var schoolExists: Bool?
override func viewDidLoad() {
super.viewDidLoad()
getSchool()
fetchFeed()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return postList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "schoolFeedCell") as! schoolFeedTableViewCell
let schoolPost = postList[indexPath.row]
cell.post.text = schoolPost.post_words
return cell
}
}
我尝试更改委托并将表视图从第二个数据源中删除,但无济于事。
答案 0 :(得分:1)
我有您的解决方案
将_sender.index值的状态保存在一个Int变量'selectedTab'中
调用@objc func controlValueChanged(_sender: BetterSegmentedControl) {
时
只能在两个索引上重新加载tableview
if _sender.index == 0 {
//friend feed
tableView.reloadData()
print("friends")
}
else if _sender.index == 1 {
//school feed
tableView.reloadData()
}
为
之类的DataSouce方法使用切换用例func tableView(_ tableView:UITableView,numberOfRowsInSection部分:Int)-> Int {
switch selectedTab {
case 0:
return arrFrind.count
case 1:
return arrScool.count
default:
return 0
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch selectedTab {
case 0:
let cell = tableView.dequeueReusableCell(withIdentifier: "cell0")!
return cell
case 1:
let cell = tableView.dequeueReusableCell(withIdentifier: "cell1")!
return cell
default:
return UITableViewCell()
}
}
在selected开关中选项卡的值为_sender.index
答案 1 :(得分:0)
您忘了像这样的委托方法
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
请提供此代码 还要检查您的数据数组是否为空 但是我建议您提供两个不同的原型单元并在它们之间切换,而不要完全更改tableview数据源和委托