分段控制更改tableView数据源

时间:2014-02-27 17:13:29

标签: ios objective-c uitableview uiview uisegmentedcontrol

UISegmentedControl更改tableView数据源 在我描述[myView addSubview:_tableView];后 而不是[self.view addSubview:_tableView];
daySegmentedControl进程停止了工作。

我有这段代码。

ViewController.m

@implementation ViewController
{
    int _tableType;
    NSArray *_data1;
    NSArray *_data2;
}

@synthesize segment;
@synthesize daySegment;
@synthesize myView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    _tableType = 1;
    _data1 = @[@[@"A",@"B",@"C"]];
    _data2 = @[@[@"D",@"E",@"F"]];

    myView = [[UIView alloc]initWithFrame:CGRectMake(-1, 44, 340, 480)];
    [self.view addSubview:myView];
    myView.opaque = NO;
    myView.backgroundColor = [UIColor colorWithWhite:1.0f alpha:0.0f];
    [self.view bringSubviewToFront:myView];

    [self segmentView];
    [self daySegmentView];
    [self dayTableView];
}

- (void)segmentView
{
    NSArray *SegmentContent = [NSArray arrayWithObjects:@"View1",@"View2",nil];
    segment = [[UISegmentedControl alloc] initWithItems:WDSegmentContent];
    segment.frame = CGRectMake(-2, 20, 326, 25);
    segment.selectedSegmentIndex = 0;
    [segment addTarget:self action:@selector(WDSegmentAction:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:segment];
}

- (void)WDSegmentAction:(id)sender
{
    switch (segment.selectedSegmentIndex){
        case 0:
            [self dayTableView];
            break;

        case 1:
            [self dayTableView];
            break;

        default:
            break;
    }
}

- (void)daySegmentView
{
    NSArray *daySegmentContent = [NSArray arrayWithObjects:@"A",@"D",nil];
    daySegment = [[UISegmentedControl alloc] initWithItems:daySegmentContent];
    daySegment.frame = CGRectMake(0, 0, 326, 25);
    daySegment.selectedSegmentIndex = 0;
    [daySegment addTarget:self action:@selector(daySegmentAction:) forControlEvents:UIControlEventValueChanged];
    [myView addSubview:daySegment];
}

- (void)daySegmentAction:(id)sender
{
    switch (segment.selectedSegmentIndex){
        case 0:
            _tableType = 1;
            [self.tableView reloadData];
            break;

        case 1:
            _tableType = 2;
            [self.tableView reloadData];
            break;

        default:
            break;
    }
}

- (void)dayTableView
{
    _tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 30, 320, 480)];
    _tableView.dataSource = self;
    _tableView.delegate = self;
    [myView addSubview:_tableView];
}

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [_data1[section]count];
}

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

    NSString *data;
    if (_tableType == 1) {
        data = _data1[indexPath.section][indexPath.row];
    } else if (_tableType == 2){
        data = _data2[indexPath.section][indexPath.row];
    }
    cell.textLabel.text = data;

    return cell;
}

@end

我对如何修复它的想法?

2 个答案:

答案 0 :(得分:2)

我使用不同的方法来改变细分。仅仅是为了说明:

分段改变方法

[_tableView reloadData];

在你的numberOfRowsInSection中:

if(_segControl.selectedSegmentIndex == 0)
    {
        return [dataSourceOne count];
    }else
    {
        return [dataSourceTwo count];
    }
}

在你的heightForRowAtIndexPath

if(_segControl.selectedSegmentIndex == 0) { //one
        return 60;
    } else {    //two
        return 70;
    }

在你的cellForRowAtIndexPath

if(_segControl.selectedSegmentIndex == 0) {
    //generate and populate cell for type one
}else
{
    //generate and populate cell for type two
}

答案 1 :(得分:0)

中使用daySegment.selectedSegmentIndex代替segment.selectedSegmentIndex
- (void)daySegmentAction:(id)sender