Ios 单视图控制器中的多个UITableview

Ios 单视图控制器中的多个UITableview,ios,objective-c,uitableview,uiview,uiviewcontroller,Ios,Objective C,Uitableview,Uiview,Uiviewcontroller,我有一个viewcontroller,我想显示3个tableview(因为内容和表属性不同)。如何在一个viewcontroller中为3个表添加这些委托方法 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sect

我有一个
viewcontroller
,我想显示3个
tableview
(因为内容和表属性不同)。如何在一个
viewcontroller
中为3个表添加这些委托方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [array1 count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {}
编辑

因此,如果我想使用自定义的
单元格向一个表行添加
uislider
,并且在滑动该值时要更改显示亮度,我该怎么办

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    if (tableView == _displayThemes) {
        return 1;
    } else {
        return 1; 
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if(tableView==_displayThemes) {
        return 1;
    } else {
        return 5;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if (tableView == _displayThemes) {
        cell.textLabel.text = [displaytheme objectAtIndex:indexPath.row];
        return cell;
    } else {
        cell.textLabel.text = [fontlist objectAtIndex:indexPath.row];
        return cell;
    }
}


- (IBAction)fontButton:(id)sender {
    _fontList = [[UITableView alloc]init];
    [self.view addSubview:_fontList];
    [UIView animateWithDuration:1.5
            delay:0
            options: UIViewAnimationOptionTransitionCurlUp
            animations:^{
                _fontList.fram e= CGRectMake(0,800,320,200);
            }
            completion:^(BOOL finished){
                _fontList.frame = CGRectMake(0,280,320,200);     
    }];

    [_fontList reloadData];
}

- (IBAction)button:(id)sender {
    _displayThemes = [[UITableView alloc]init];
    [self.view addSubview:_displayThemes];
    [UIView animateWithDuration:1.5
            delay:0
            options: UIViewAnimationOptionTransitionCurlUp
            animations:^{
                _displayThemes.frame=CGRectMake(0,800,320,200);
            }
            completion:^(BOOL finished){
                _displayThemes.frame=CGRectMake(0,280,320,200);
    }];
}

您总是可以得到一个引用,并且总是可以检查调用了哪个tableView委托或数据源方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    if (tableView == self.tableView1)
    {
        return 1;
    }

    if (tableView == self.tableView2)
    {
        return 1;
    }

    if (tableView == self.tableView3)
    {
        return 1;
    }
}
对所有表使用相同的标识符不会带来任何好处。使用类似于:

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{    
    if (tableView == self.tableView1)
    {
        static NSString *CellIdentifier1 = @"cellForTable1";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];

        if (!cell)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1];
        }

        cell.textLabel.text = [NSString stringWithFormat: @"table1: %d.%d", indexPath.section, indexPath.row];

        return cell;
    }

    if (tableView == self.tableView2)
    {
        static NSString *CellIdentifier2 = @"cellForTable2";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier2];

        if (!cell)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier2];
        }

        cell.textLabel.text = [NSString stringWithFormat: @"table2: %d.%d", indexPath.section, indexPath.row];

        return cell;
    }

   if (tableView == self.tableView1)
    {
        static NSString *CellIdentifier3 = @"cellForTable3";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier3];

        if (!cell)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier3];
        }

        cell.textLabel.text = [NSString stringWithFormat: @"table3: %d.%d", indexPath.section, indexPath.row];

        return cell;
    }   
}

这与使用一个表视图时相同,但您应该检查当前使用的是哪个表视图

myTableView1.dataSource = self;
...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  if (tableView == myTableView1) {
    // your code 1
  }
  else 
  if (tableView == myTableView2) {
      // your code 2
  }
  else 
  if (tableView == myTableView3) {
      // your code 3
  }
}
编辑: 关于亮度:

关于
UISlider
它具有
minimunValue
maximumValue
属性

- (void) sliderChanged:(UISlider*)sender{
    UISlider *slider = (UISlider*)sender;
    [[UIScreen mainScreen] setBrightness:slider.value];
}
编辑:
之前的所有方法都不适用于我,我提出了以下解决方案:

  public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  if((tableView1 != nil) && (tableView  == tableView1)) {
   return Items1.count
  }
  else if((tableView2 != nil) && (tableView  == tableView2)) {
   return Items2.count
  }
  else if((tableView3 != nil) && (tableView  == tableView3)) {
   return Items3.count
  }
  else {
   return 0
  }
}

您可以通过以下方式在单个视图控制器中管理多个tableViewUItableViewDelegateUItableViewDatasource中编写以下代码

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if tableView  == tableView1
    {
        // place your code here
    }
    else if tableView  == tableView2 {
        // place your code here
    }
    else {
      return 0
    }
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if tableView  == tableView1
    {
        // place your code here
    }
    else if tableView  == tableView2 {
        // place your code here
    } 
    else {
        return 0
    }
}
// You can set a different size of your tableView using below lines of code 
if tableView  == tableView1{
    return 50
}
else{
    return 40
}

我可以添加静态NSString*CellIdentifier=@“Cell”;通用?我想是的,但我记得NSString*CellIdentifier=[NSString stringWithFormat:@“行%dsection%d”,indexPath.row,indexPath.section];对我来说很有用。我很欣赏你的答案,但我如何从tableview行中获取该值?我可以添加静态NSString*CellIdentifier=@“Cell”;共有?如果所有表中的所有单元格都是同一类型,则可以。但是我想用不同的单元标识符来分离重用功能。我的表现在没有显示任何东西。你能发布你的新代码吗?那是一个不起作用的代码。不是所有的代码,只是表委托和数据源方法…尝试修改CellForRowatineXpath以适应我答案中的格式。至于自定义单元格中的滑块,您应该发布另一个问题-这是完全不同的主题。欢迎使用堆栈溢出!请不要把你的源代码扔在这里。对你的答案要和蔼可亲,尽量给它一个很好的描述,这样其他人就会喜欢它并投赞成票。见:
  public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  if((tableView1 != nil) && (tableView  == tableView1)) {
   return Items1.count
  }
  else if((tableView2 != nil) && (tableView  == tableView2)) {
   return Items2.count
  }
  else if((tableView3 != nil) && (tableView  == tableView3)) {
   return Items3.count
  }
  else {
   return 0
  }
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if tableView  == tableView1
    {
        // place your code here
    }
    else if tableView  == tableView2 {
        // place your code here
    }
    else {
      return 0
    }
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if tableView  == tableView1
    {
        // place your code here
    }
    else if tableView  == tableView2 {
        // place your code here
    } 
    else {
        return 0
    }
}
// You can set a different size of your tableView using below lines of code 
if tableView  == tableView1{
    return 50
}
else{
    return 40
}