一个视图控制器中有两个表视图,一个表视图未显示
Posted
技术标签:
【中文标题】一个视图控制器中有两个表视图,一个表视图未显示【英文标题】:Two tableviews in one view controller, one table view not showing up 【发布时间】:2019-06-07 18:46:53 【问题描述】:我有两个TableView
s 在一个ViewController
中,只有一个表可以填充。我在我的视图控制器中为这两个表创建了插座。这是我的viewDidLoad
override func viewDidLoad()
super.viewDidLoad()
pickerTableView.delegate = self
pickerTableView.dataSource = self
tableView.delegate = self
tableView.dataSource = self
tableView.tableFooterView = UIView()
pickerTableView.reloadData()
tableView.reloadData()
似乎唯一读取的表是self.tableView
,而pickerTableView
从未在UITableView
的协议中读取
extension MealViewController: UITableViewDelegate, UITableViewDataSource
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
if tableView == self.tableView
let nameHeaderView = NameHeaderView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 40))
nameHeaderView.delegate = self
nameHeaderView.sectionIndex = section
nameHeaderView.nameButton.setTitle(Data.userModels[section].name, for: .normal)
return nameHeaderView
else
return nil
func numberOfSections(in tableView: UITableView) -> Int
if tableView == self.tableView
return Data.userModels.count
else
return 0
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
if tableView == self.tableView
if Data.userModels[section].isExpandable
return Data.userModels[section].itemModels.count
else
return 0
else if tableView == pickerTableView
return Data.userModels.count
else
return 0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if tableView == self.tableView
let cell = tableView.dequeueReusableCell(withIdentifier: "nameCells", for: indexPath) as! MealTableViewCell
cell.setup(itemModel: Data.userModels[indexPath.section].itemModels[indexPath.row])
return cell
else if tableView == pickerTableView
let cell2 = tableView.dequeueReusableCell(withIdentifier: "pickerCells", for: indexPath) as! NamePickerTableViewCell
cell2.setup(userModel: Data.userModels[indexPath.row])
print(Data.userModels)
return cell2
else
return UITableViewCell()
我还对每个tableView
应用了约束,因此它们都出现在屏幕上。当我运行应用程序时,会显示 self.tableView
的数据,但 pickerTableView
显示为空。 self.tableView
需要部分,pickerTableView
不需要部分,这可能是个问题吗? Data.userModels
数组中还有数据。
仅供参考,这是我的UITableViewCell
课程:
class NamePickerTableViewCell: UITableViewCell
@IBOutlet weak var namePickerLabel: UILabel!
override func awakeFromNib()
super.awakeFromNib()
// Initialization code
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
func setup(userModel: UserModel)
namePickerLabel.text = userModel.name
感谢您的帮助!
【问题讨论】:
【参考方案1】:如果你不需要pickerTableView中的任何部分,那么它也必须至少有一个部分。
所以return 1
在方法numberOfSections
时tableview == self. pickerTableView
。
func numberOfSections(in tableView: UITableView) -> Int
if tableView == self.tableView
return Data.userModels.count
else
return 1
【讨论】:
以上是关于一个视图控制器中有两个表视图,一个表视图未显示的主要内容,如果未能解决你的问题,请参考以下文章
swift2.0中的didSelectRowAtIndexPath在一个视图控制器中的两个表视图