38

我想用多个部分制作 tableView 但我不想使用字典我有两个数组我希望第一个数组应该在第一部分加载,第二个在第二部分加载。

我有 3 个项目的 arrayOne 和 4 个项目的 arrayTwo,所以如何添加它们并在部分中显示它们。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    if(section == 0)
        return resultArray.count;
    else
        return resultArray.count;
}

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


- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSLog(@"Number of Sections");
    if(section == 0)
        return @"Section 1";
    if(section == 1)
        return @"Section 2";
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     NSLog(@"Table Cell Data");
     static NSString *CellIdentifier = @"Cell";
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
     }

     appDelegate = (MultipleDetailViewsWithNavigatorAppDelegate *)[[UIApplication sharedApplication] delegate];

     if (indexPath.section==0) {    
         appDelegate = (MultipleDetailViewsWithNavigatorAppDelegate *)[[UIApplication sharedApplication] delegate];
         ObjectData *theCellData = [resultArray objectAtIndex:indexPath.row];
         NSString *cellValue =theCellData.category;
         NSLog(@"Cell Values %@",cellValue);
         cell.textLabel.text = cellValue;
         return cell;
     }
     else {
         ObjectData *theCellData = [resultArray objectAtIndex:indexPath.row];
         NSString *cellValue =theCellData.category;
         cell.textLabel.text = cellValue;
         return cell;       
     }
}
4

6 回答 6

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

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
      if (section==0)
      {
             return [array1 count];
      }
      else{
             return [array2 count];
      }
 }

 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
      if(section == 0)
           return @"Section 1";
      else
           return @"Section 2";
 }


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

      static NSString *CellIdentifier = @"Cell";

      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) {
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
      }

 if (indexPath.section==0) {
     ObjectData *theCellData = [array1 objectAtIndex:indexPath.row];
     NSString *cellValue =theCellData.category;
     cell.textLabel.text = cellValue;
 }
 else {
     ObjectData *theCellData = [array2 objectAtIndex:indexPath.row];
     NSString *cellValue =theCellData.category;
     cell.textLabel.text = cellValue;
 }
     return cell;        
 }
于 2013-03-01T05:28:07.233 回答
1

以下是相关的 Swift 3 行:

func numberOfSections (in tableView: UITableView) -> Int {
    ...
    return numberOfSections
}

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    //Not necessary, but will let you format the section headers. Example:
    guard let header = view as? UITableViewHeaderFooterView else { return }
    header.textLabel?.font = UIFont.boldSystemFont(ofSize: 24)
    header.textLabel?.textColor = UIColor.darkGray
    header.textLabel?.textAlignment = .center
    header.textLabel?.frame = header.frame
    view.tintColor = UIColor.white
}

func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) {
    //Also not necessary, but clear footers help space out sections
    view.tintColor = UIColor.clear   
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    //Spacing between sections:
    return 25
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    ...
    return sectionCount
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //All your cell setup
    ...
    //I call this to get the absolute row number (disregarding sections)
    let row = getAbsoluteRow_InCurrentSection(indexPath: indexPath)
    //Now you can use the row number to grab a value from an array or CoreData object and use the value to populate your cell!! 
}

func getAbsoluteRow_InCurrentSection(indexPath: IndexPath) -> Int {
    var aggRows = 0
    if currentListEntity == "GrocTask" {
        let curSection = indexPath.section
        for i in 0..<curSection {
            aggRows += flex1ArrayCnt[i]
        }
        aggRows += indexPath.row
    }
    return aggRows
}

//请注意,我只包括那些与构建带有部分的 UITableView 直接相关的内容。我没有包含 editActions、didSelect 或其他 UITableView 委托函数。

于 2017-05-29T21:35:54.173 回答
0

改变这个if (section==0)

if (indexPath.section==0)

你必须实现这个功能:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
 {
     if(section == 0)
         return arrSection1.count;
      else
         return arrSection2.count;
 }
于 2013-03-01T05:22:43.513 回答
0

numberOfRowsInSection应该是这样的:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (section == 0) {
        return firstArray.count;
    } else {
        return secondArray.count;
    }
}
于 2013-03-01T05:23:44.177 回答
0

你几乎走在正确的轨道上......

让我们考虑一下您的两个数组是arrOnearrTwo......

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
      if(section == 0)
      return [arrOne count];
      else
      return [arrTwo count];
    }

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

         static NSString *CellIdentifier = @"Cell";

         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
          }

             if (indexPath.section==0) {


        ObjectData *theCellData = [arrOne objectAtIndex:indexPath.row];
        NSString *cellValue =theCellData.category;
        NSLog(@"cellValue = %@",cellValue); //To see the value of string cellValue
        cell.textLabel.text = cellValue;

        return cell;

    }

    else {
        ObjectData *theCellData = [arrTwo objectAtIndex:indexPath.row];
        NSString *cellValue =theCellData.category;
        cell.textLabel.text = cellValue;

        return cell;        
    }
}
于 2013-03-01T05:23:51.217 回答
0

TableView Delegate Method 已经将部分指定为:(NSInteger)section .. 所以我们也可以使用 switchCase

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        switch (section)
        {
            case 0:
                return self.arrMedia.count;
                break;
            case 1:
                return 1;
                break;
        }
        return 0;
    }
于 2014-12-02T11:57:35.537 回答