UITableView With Multiple Sections

后端 未结 6 1673
名媛妹妹
名媛妹妹 2020-12-04 19:36

I want to make tableView with multiple section but i do not want to use dictionary i have two arrays i want that first array should be loaded in first section and second in

相关标签:
6条回答
  • 2020-12-04 20:03

    Change this if (section==0)

    to if (indexPath.section==0)

    You have to implement this function :

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
     {
         if(section == 0)
             return arrSection1.count;
          else
             return arrSection2.count;
     }
    
    0 讨论(0)
  • 2020-12-04 20:07

    TableView Delegate Method already give the section as :(NSInteger)section.. so we can also use switchCase

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
        {
            switch (section)
            {
                case 0:
                    return self.arrMedia.count;
                    break;
                case 1:
                    return 1;
                    break;
            }
            return 0;
        }
    
    0 讨论(0)
  • 2020-12-04 20:09

    Here are the relevant Swift 3 lines:

    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
    }
    

    //Please be aware, I only included those directly relevant to building a UITableView with sections. I did not include editActions, didSelect, or other UITableView delegate functions.

    0 讨论(0)
  • 2020-12-04 20:18

    Your numberOfRowsInSection should be something like this:

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        if (section == 0) {
            return firstArray.count;
        } else {
            return secondArray.count;
        }
    }
    
    0 讨论(0)
  • 2020-12-04 20:20
     - (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;        
     }
    
    0 讨论(0)
  • 2020-12-04 20:20

    You are on almost right track....

    Let us consider your two arrays are arrOne and arrTwo.....

        - (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;        
        }
    }
    
    0 讨论(0)
提交回复
热议问题