Search code examples
iosuitableviewios7uipickerview

Populating multiple sections tableView using pickerView


I have a tableview whose data are selected from a pickerView(3 columns).Here is the code:

- (void)viewDidLoad {
    [super viewDidLoad];
    //PickerView content and sort them for displaying
    Number=@[@"Trans",@"2005",@"2006",@"2007",@"2008",@"2009",@"2010",@"2011",@"2012",@"2013",@"2014",@"2015",@"2016"];
    Season=@[@"Spring",@"Summer",@"Fall"];
    Course=@[@"CHEM1100 General Chem I",@"CHEM2100 General Chem II",@"CHEM3511 Org Chem",@"CHEM3521 Org Chem II"];
    Course =[Course sortedArrayUsingSelector:@selector(compare:)];
    Number =[Number sortedArrayUsingSelector:@selector(compare:)];
    Season =[Season sortedArrayUsingSelector:@selector(compare:)];

    _tableView.delegate = self;
    _tableView.dataSource = self;

}

To populate the tableView, I use a button, when the button is pushed, the selection of pickerView will send data to tableView

- (IBAction)addCourse:(UIButton *)sender {

    NSInteger numRow=[picker selectedRowInComponent:kNumComponent];//0=1st,1=2nd,etc
    NSInteger SeaRow=[picker selectedRowInComponent:kSeaComponent];//0=fall,1=spring,2=summer
    NSInteger CourseRow=[picker selectedRowInComponent:kCourseComponent];

    NSString *num=Number[numRow];
    NSString *season=Season[SeaRow];
    NSString *course=Course[CourseRow];

    NSString *CourseToAdd=[[NSString alloc ]initWithFormat:@"%@ ",course];
    NSString *SeasonToAdd=[[NSString alloc ]initWithFormat:@"%@ ",season];
    NSString *YearToAdd=[[NSString alloc ]initWithFormat:@"%@ ",num];

    [self.msgCourse addObject:CourseToAdd];
    [self.msgSeason addObject:SeasonToAdd];
    [self.msgYear addObject:YearToAdd];
    [_tableView reloadData];
}

To show the data in tableView, I use

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



    UITableViewCell *cell = nil;
    cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    if(!cell){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
    }


    cell.textLabel.text=[self.msgCourse objectAtIndex:indexPath.row];

    return cell;

}

To determine the rows and sections

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    //return [self.msgYear  count];
    return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [self.msgCourse  count];
}

It is running fine. The output is shown in the picture attached. Here are my questions:

(1) I want the tableView shown in more than one sections. For example, "2005 Fall" is one section, inside this section, the courses are shown. In other words, the first two columns selected in the pickerview will form the section title.

(2) How to sort the results in each section?

enter image description here


Solution

  • You could define number of sections and rows in it as following:

    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
     // number of courses?
        return 3;
    }
    
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    
        return ((section == 0) ? 1 : 3);
    }
    
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    {
        // return appropriate cell(s) based on section
        if(indexPath.section == 0) 
        {
            // Return 1 cell
        }
        else if(indexPath.section == 1) 
        {
            switch(indexPath.row) {
                case 0: // Initialize cell 1
                        break;
                case 1: // Initialize cell 2
                        break;
                ...
            }
        }
        return cell;
    }
    

    Here are the good tutorials to learn more: