一个视图控制器中有两个表视图,一个表视图未显示

Posted

技术标签:

【中文标题】一个视图控制器中有两个表视图,一个表视图未显示【英文标题】:Two tableviews in one view controller, one table view not showing up 【发布时间】:2019-06-07 18:46:53 【问题描述】:

我有两个TableViews 在一个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 在方法numberOfSectionstableview == self. pickerTableView

func numberOfSections(in tableView: UITableView) -> Int 
    if tableView == self.tableView 
        return Data.userModels.count
     else 
        return 1
    

【讨论】:

以上是关于一个视图控制器中有两个表视图,一个表视图未显示的主要内容,如果未能解决你的问题,请参考以下文章

3.复杂查询

Swift - 表视图未填充数据但未显示错误

swift2.0中的didSelectRowAtIndexPath在一个视图控制器中的两个表视图

2 在一个视图控制器中使用 Swift 3 的表视图

IOS - 从表视图控制器获取值并将其发送到另一个表视图控制器

从导航控制器内的表视图控制器中的按钮展开