创建具有不同的细胞类型分组的UITableView(Creating Grouped UITable

2019-07-30 03:10发布

我需要创建一个分组的UITableView,其中包括在各节的某些部分,可能不同的细胞类型。

我试图创造一些像老Foursquare的应用程序,用户页面(包括“排行榜”,“朋友的建议”,“朋友”,“统计”,“最探索类别” ......段)。

我是相当新的IOS编程,所以这种观点可能不是一个分组的UITableView。

我特别卡住创造不同的细胞部分,并找出被点击的细胞。

我的数据来源将是2个不同的NSArray *,它由不同的数据类型,这就是为什么我需要不同的定制单元。

Answer 1:

既然你有两个不同的数据集,你需要在不同的部分同时显示,您必须将数据源方法一分为二。

基本上,选择你想成为第一个和您去哪个数据集。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if(section)return secondArray.count;
    //Essentially, if statements evaluate TRUE and move forward if the inside is 1 or greater (TRUE == 1)
    return firstArray.count;
    //If the first if statement return hits, then the code will never reach this statement which turns this into a lighter if else statement
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.section)
    {
        //do stuff with second array and choose cell type x
    }
    else
    {
        //do stuff with first array and choose cell type y
    }
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Get the cell with: UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if(indexPath.section)
    {
        //perform action for second dataset
    }
    else
    {
        //perform action for first dataset
    }
}

对于头,您可以使用这些方法,只是保持相同类型的样式如上:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;


Answer 2:

您可以创建的UITableViewCell的多个自定义子类,并在的tableView:的cellForRowAtIndexPath:方法为您UITableViewDataSource,你可以使用if语句来决定使用什么类型的细胞。

例如,这里是什么,我会做一个大致的轮廓:

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

    //First, determine what type of object we're showing
    if (indexPath.section == 0) {
         //Create and return this cell.
    } else if (indexPath.section == 1) {
         //Create and return this cell.
    }...
}

这里是你如何实现numberOfRowsInSection

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

   if (section == 0) {
      return [firstSectionArray count];
   } else if (section == 1) {
      return [secondSectionArray count];
   } ...
}

对于didSelectRowAtIndexPath

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   if (indexPath.section == 0) {
      ObjectSelected *objectSelected = [firstArray objectAtIndex:indexPath.row];

      //Now you've got the object, so push a view controller:
      DetailViewController *dvc = [[DetailViewController alloc] init];
      dvc.objectSelected = objectSelected;
      [self.navigationController pushViewController:dvc];
   } else if (indexPath.section == 1) {
      //Same thing, just call [secondArray objectAtIndex:indexPath.row] instead!
   }
}


文章来源: Creating Grouped UITableview with Different Cell Types