2013-05-31 129 views
0

我想動態修改單元格的內容,即使在重新加載數據後,我也沒有真正的工作。正如所料,當視圖加載時,我在桌子上垂直放置1 1 1 1 1 1 1,當我按下分段1時,我得到4 4 4 4 4 4 4,但是,當我按2時,我得到-1 - 1 -1 -1 -1 -1再次,當我按3我再次得到4 4 4 4 4 4 4。另外,我的細胞內容取決於按下按鈕的順序。我的代碼如下表只能有一個行和衆多的部分:動態修改單元格文本

- (void)viewDidLoad 
{ 
currentarray=[NSArray arrayWithObjects:@"-1",@"-2",@"-3", @"-4", nil]; 
} 
- (IBAction)SegControl: (id) sender{ 

for(int i=0; i<4; i++){ 
    if(theSegControl.selectedSegmentIndex==i){ 
     buttonpressed[i]=[NSNumber numberWithInt:1]; 
    } 
    else { 
     buttonpressed[i]=[NSNumber numberWithInt:0]; 
    } 
} 

if([buttonpressed[0] intValue]==1){ 

    currentarray=sorteddectotalteamPoints; 

} 

else if([buttonpressed[1] intValue]==1){ 

    currentarray=[NSArray arrayWithObjects:@"4",@"6",@"7", @"8", nil]; NSLog(@"%@",@"two pressed"); 
} 

else if([buttonpressed[2] intValue]==1){ 

    currentarray=[NSArray arrayWithObjects:@"9",@"10",@"11", @"12", nil]; NSLog(@"%@",@"three pressed"); 
} 

else { 

    currentarray=[NSArray arrayWithObjects:@"13",@"14",@"15", @"16", nil]; NSLog(@"%@",@"four pressed"); 
} 

//to update the cells  
for(int i=0; i<[teamnameswithoutRepeat count];i++){ 
    [byTeam reloadSections:[NSIndexSet indexSetWithIndex:i] withRowAnimation:UITableViewRowAnimationFade]; 
} 
    NSLog(@"%@",currentarray); 


    } 

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

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, tableView.rowHeight)] ; 

label.font = [UIFont fontWithName:@"Helvetica-Bold" size:14]; 
label.layer.borderColor = [UIColor whiteColor].CGColor; 
label.layer.borderWidth = 1.0; 


label.textAlignment = NSTextAlignmentCenter; 
label.textColor = [UIColor blackColor]; 
NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.section]; 

MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 

if (cell == nil) { 

    cell = [[MyTableCell alloc] initWithStyle:UITableViewCellStyleDefault 
           reuseIdentifier:MyIdentifier] ; 
    if(tableView==byTeam) 
    { 

     //[tableView reloadData]; 
     label.text=[currentarray objectAtIndex:0]; 
     [cell.contentView addSubview:label]; 
     label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
     UIViewAutoresizingFlexibleHeight; 
     // UITableViewCell *cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]]; 
     //cell.textLabel.text = @"updated text"; 




     } 

     } 
     } 

回答

0

你需要移動配置if (cell == nil)塊外的細胞的代碼,這樣,當你重裝電池它會被執行並且他們得到dequeueReusableCellWithIdentifier:回收:

if (cell == nil) { 

    cell = [[MyTableCell alloc] initWithStyle:UITableViewCellStyleDefault 
          reuseIdentifier:MyIdentifier] ; 
} 

if(tableView==byTeam) { 
    label.text=[currentarray objectAtIndex:0]; 
    //... 
} 

而且,除非我失去了一些東西,你的分段控制處理程序,可以通過消除buttonPressed變量簡化了不少。像這樣的東西,例如:

- (IBAction)SegControl:(id)sender 
{ 
    switch(sender.selectedSegmentIndex) { 
     case 0: 
      currentArray = sorteddectotalteamPoints; 
      break; 
     case 1: 
      currentArray = [NSArray arrayWithObjects:@"4",@"6",@"7", @"8", nil]; 
      break; 
     case 2: 
      currentArray = [NSArray arrayWithObjects:@"9",@"10",@"11", @"12", nil];; 
      break; 
     case 3: 
      currentArray = [NSArray arrayWithObjects:@"13",@"14",@"15", @"16", nil]; 
      break; 
    } 

    //to update the cells  
    for(int i=0; i<[teamnameswithoutRepeat count];i++) { 
     [byTeam reloadSections:[NSIndexSet indexSetWithIndex:i] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
}  
+0

非常感謝你,工作就像一個魅力!豎起大拇指! – snowleopard

+0

我知道你已經做了,但你能否請你進一步解釋爲什麼我不得不將它移出cell = nil語句。問候 – snowleopard

+0

當然。當你重新加載一個單元格時,'dequeueReusableCellWithIdentifier:'回收你重新加載並返回的單元格之一。所以你的'cell'變量在你進入'if(cell == nil)'語句之前已經設置好了,所以程序永遠不會進入該塊。它在第一次傳遞時工作正常,因爲最初沒有要回收的單元格,並且'dequeueReusableCellWithIdentifier:'返回'nil',從而導致程序進入該塊。 –