xcode8 swift3 multiple UITableViews with custom ce

2019-06-11 02:12发布

Following up to the excellent write up of a ViewController with a single tableView, I'd like to extend the question to having 2 separate tableViews and custom cells belonging to each one independently.

At the moment, I have the following skeleton, which is semi-working, and I am sure there is a more elegant and less naive approach to solving this.

  • after the viewDidLoad()
vInfoTV.dataSource = self
vInfoTV.delegate = self
vInfoTV.tag = Int.min

vAppTV.dataSource = self
vAppTV.delegate = self
vAppTV.tag = Int.max
  • numberOfRowsInSection function
func tableView(_ tableView: UITableView, numberOfRowsInSection section:Int) -> Int {
    if tableView.tag == Int.min {
        return mydata.cats.count
    } else {
        return mydata.dogs.count
    }
}

Is it appropriate to set the tableView's tags as I do here, and switch on them based on tag value?

  • Cells in func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView.tag == Int.min {
    // Cat Table View
    if indexPath.row == 0 {
        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "firstCustomCell")
        //set the data here
        return cell
    }
    else if indexPath.row == 1 {
        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "secondCustomCell")
        //set the data here
        return cell
    }
    else {
        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "thirdCustomCell")
        //set the data here
        return cell
    }


} else {
    // Dog Table View
    if indexPath.row == 0 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "poodleCell", for: indexPath) as! NewApplicationViewCell
        cell.typeL.text = Dogs[(indexPath as NSIndexPath).row].type
        return cell
    }
    else {
       let cell = tableView.dequeueReusableCell(withIdentifier: "mastifCell", for: indexPath) as! InitialDMVInspectionTableView
           cell.typeL.text = Dogs[(indexPath as NSIndexPath).row].type
       return cell
    }
} 
  • What is the best way to now hide a tableView, which has no cells (ie no data)?

Is this the right way to do this? All comments welcome!

THANK YOU!

1条回答
迷人小祖宗
2楼-- · 2019-06-11 02:59
  1. Is it appropriate to set the tableView's tags as I do here, and switch on them based on tag value?

    yes, you did exactly how I would do. Set the tag of your tables' differently. However I would not say Int.min or Int.max, rather I would want to know instantly what did I set as the tableviews' tag. So, I would just pick a number like 99 and 100. the reason I would not pick 0 and 1 is by default any object's tag is 0. So, if I put 99, I would be just keeping myself safe saying that even if someone comes and drag another table view inside my view, it will still not conflict with the ones before.

  2. What is the best way to now hide a tableView, which has no cells (ie no data)? Your tableview will not show up if you don't have data as in your numberOfRowsInSection, you set the row number to be the number of data in your desired data array.

查看更多
登录 后发表回答