3

我需要创建一个分组的 uitableview,其中包括一些部分,并且每个部分中可能包含不同的单元格类型。

我正在尝试创建类似旧的foursquare 应用程序、用户页面(包括“排行榜”、“朋友建议”、“朋友”、“统计”、“最常探索的类别”......部分)。

我对 ios 编程相当陌生,因此该视图可能不是分组的 uitableview。

我特别坚持的是为部分创建不同的单元格,并找出单击了哪些单元格。

我的数据源将是 2 个不同的 NSArray*,它们由不同的数据类型组成,这就是为什么我需要不同的自定义单元格。

4

2 回答 2

6

由于您有两组不同的数据,并且需要在不同的部分中显示它们,因此您必须将数据源方法分成两个。

基本上,选择你想首先成为的数据集,然后就可以了。

- (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;
于 2012-06-25T21:42:57.290 回答
5

您可以创建 UITableViewCell 的多个自定义子类,并且在您的 UITableViewDataSource 的tableView:cellForRowAtIndexPath:方法中,您可以使用 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!
   }
}
于 2012-06-25T20:29:12.923 回答