2014-02-27 2 views
0

UISegmentedControl이 tableView 데이터 소스를 변경합니다. 내가
대신 [self.view addSubview:_tableView];[myView addSubview:_tableView];을 설명

daySegmentedControl 프로세스가 작동을 멈췄습니다.세그먼트 제어 변경 tableView 데이터 소스

이 코드가 있습니다.

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 

내가 그것을 고칠 수있는 방법에 대한 생각?

+1

에서 segment.selectedSegmentIndex는 설명 할 수 'daySegmentedControl 프로세스는 작동이 중지'? 나는 작동하지 않는 것을 이해하지 못합니다. – bneely

답변

0

사용 daySegment.selectedSegmentIndex 대신

- (void)daySegmentAction:(id)sender 
2

세그먼트를 변경하는 데 다른 접근 방식을 사용했습니다. 그냥 그림을 위해 : 당신의 numberOfRowsInSection에서

[_tableView reloadData]; 

: 세그먼트

는 방법을 변경하여 cellForRowAtIndexPath에 heightForRowAtIndexPath

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

에서

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

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