【问题标题】:Populating multiple sections tableView using pickerView使用pickerView填充多个部分tableView
【发布时间】:2015-04-07 16:48:16
【问题描述】:

我有一个 tableview,其数据是从 pickerView(3 列)中选择的。代码如下:

- (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;

}

为了填充tableView,我使用了一个按钮,当按钮被按下时,pickerView的选择会发送数据到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];
}

为了在 tableView 中显示数据,我使用

-(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;

}

确定行和节

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

运行良好。输出如附图所示。 这是我的问题:

(1) 我希望 tableView 显示在多个部分中。例如,“2005 Fall”是一个部分,在这个部分中,显示了课程。换句话说,pickerview 中选择的前两列将形成部分标题。

(2)如何对每个部分的结果进行排序?

【问题讨论】:

    标签: ios uitableview ios7 uipickerview


    【解决方案1】:

    您可以在其中定义节数和行数,如下所示:

    -(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;
    }
    

    以下是了解更多信息的好教程:

    【讨论】:

    • 您好 casilas,非常感谢您的回复。其中一个棘手的部分是节号是动态的,由用户的选择(pickerview 的前两列)决定。请问numberOfSectionsInTableView中如何解决?
    猜你喜欢
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多