【问题标题】:Segmented Control change tableView datasourceSegmented Control 更改 tableView 数据源
【发布时间】:2014-02-28 11:11:22
【问题描述】:

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

知道如何解决它吗?

【问题讨论】:

  • 你能解释一下“daySegmentedControl 进程停止工作”吗?我不明白什么不起作用。

标签: ios objective-c uitableview uiview uisegmentedcontrol


【解决方案1】:

我使用不同的方法来更改细分。仅作说明:

在段内改变方法:

[_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
}

【讨论】:

    【解决方案2】:

    中使用daySegment.selectedSegmentIndex而不是segment.selectedSegmentIndex
    - (void)daySegmentAction:(id)sender
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多