iOS program to use multiple UITableView in a single UIViewController

后端 未结 5 586
庸人自扰
庸人自扰 2021-01-15 09:55

I am trying to implement 3 tables in a single segue in a storyboard. When one table is selected it will unhidden a view with another table and likewise one more. The followi

相关标签:
5条回答
  • 2021-01-15 10:03

    Swift 4.1

    4.1 is a version which i wrote the code. It might be worked in the other version of swift. I'm not sure.


    Firstly , right click to the tableViewContent1 and tableViewContent2 and drag it to dataSource and delegate into View Controller like this image below.


    Secondly , you can implement as my code below. * I've already set the both label in tableViewContent1 and tableViewContent2 with tag = 1000 .


    import UIKit

    class ViewController: UIViewController {
    
        @IBOutlet weak var tableViewContent1: UITableView!
        @IBOutlet weak var tableViewContent2: UITableView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
        }
    
    }
    

    extension ViewController :
    UITableViewDelegate,UITableViewDataSource {
    
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            if tableView == tableViewContent1 {
                // in order to make the tableViewContent1 get 5 rows.
                return 5
            }
            else{
                // in order to make the tableViewContent2 get 3 rows.
                return 3
            }
    
        }
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
            if tableView == self.tableViewContent1 {
                let cell = tableView.dequeueReusableCell(withIdentifier: "content1", for: indexPath) as! TableViewCellFirstCustom 
                let label : UILabel = cell.viewWithTag(1000) as! UILabel{
                    lab.text = "to change label in content1."
                }
                return cell
            }
    
            else {
                let cell = tableView.dequeueReusableCell(withIdentifier: "content2", for: indexPath)  
                let label : UILabel = cell.viewWithTag(1000) as! UILabel
                label.text = "to change label in content2."
                return cell
            }
        }
    
    }
    

    after that you will get result like image below. It worked for me.

    0 讨论(0)
  • 2021-01-15 10:05

    You have the tableview reference in each of your delegate methods right? You can find out which tableview you are currently walking through based on that..

    Assuming..

    IBOutlet UITableView *tableView1;
    IBOutlet UITableView *tableView1;
    IBOutlet UITableView *tableView1;
    

    Ex:

    -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
    {
        if(tableView == tableView1)
          return 1;
        if(tableView == tableView2)
          return 5;
        return 10;
    }
    

    You can do the same for the other delegate methods.. I hope I understood your question correctly..

    0 讨论(0)
  • 2021-01-15 10:06

    You should declare your tableViews in .h file.

    @property (weak, nonatomic) UITableView *firstTableView;
    @property (weak, nonatomic) UITableView *secondTableView;
    @property (weak, nonatomic) UITableView *thirdTableView;
    

    And then all the delegate methods have variable with pointing witch object call this method, so you can check:

    -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        if(tableView == self.firstTableView)
           return  3;
       else if(tableView == self.secondTableView)
           return 4;
       else if(tableView == self.thirdTableView)
          return 100;
    }
    

    The other delegate methods work in the same way.

    0 讨论(0)
  • 2021-01-15 10:12

    you nedd to create 3 uitableview outlets. and then you can identifies tableviews by specifyin tag. for example tableview1.tag=1, tableview.tag=2 etc.

    then in tableview methods you can use it. for example.

    -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
     if(tableView.tag==1){
    return  3;
    }
    else if(tableView=2)
    {return 3;}
    }
    

    may be this help.

    0 讨论(0)
  • 2021-01-15 10:17

    You can keep track of the different tableviews using class properties e.g.:

    @property (nonatomic, strong) UITableView *tableView1;
    @property (nonatomic, strong) UITableView *tableView2;
    @property (nonatomic, strong) UITableView *tableView3;
    

    In the delegate methods you can check for the correct tableView e.g.:

    if (tableView == self.tableView1) {
        // add code for tableView1
    } else if (tableView == self.tableView2) {
        // add code for tableView2
    } else if (tableView == self.tableView3) {
        // add code for tableView3
    } else {
        // unknown tableView
    }
    
    0 讨论(0)
提交回复
热议问题