2014-12-23 36 views
0

在更新特定的uitableviewcell中的uibutton時出現問題。當我更改按鈕顏色時,它將更新uitableview中的每個按鈕。附上我下面的代碼:更改特定單元的UIButton

PFObject *post = [self.objectArray objectAtIndex:indexPath.section]; 

    cell.likeBtn.layer.cornerRadius = 5.0f; 

    //To access button methods 
    [cell.likeBtn setTag:indexPath.section]; 


    NSMutableDictionary *attributes = [NSMutableDictionary 
             dictionaryWithDictionary:[[TMMemoryCache sharedCache] objectForKey:post.objectId]]; 


    BOOL likedByCurrentUser = [[attributes objectForKey:@"likedByCurrentUser"] boolValue]; 

    if (likedByCurrentUser) { 

     cell.likeBtn.backgroundColor = [UIColor flatRedColor]; 
     [cell.likeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
     [cell.likeBtn setTitle:@"Liked" forState:UIControlStateNormal]; 
    }else{ 

     //NSLog(@"Did not like %@", post.objectId); 
     cell.likeBtn.backgroundColor = [UIColor flatBlueColor]; 
     [cell.likeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
     [cell.likeBtn setTitle:@"Like" forState:UIControlStateNormal]; 
    } 

是他們的一個更好的辦法只在一個特定的細胞更新的UIButton?

+0

你把這段代碼放在哪裏? – hariszaman

回答

1

有兩種方法可以做到你想要什麼,這取決於更新的信息是怎麼來的:

  1. cellForRowAtIndexPath:構成單元。
  2. 讓單元管理自己的內容。

往往不是,#1是要走的路。當新的信息進入你的UITableViewController,請執行下列操作1:

  1. 呼叫reloadData迫使整個表的刷新。
  2. 找出哪些單元需要更新,並調用reloadRowsAtIndexPaths:withRowAnimation:傳遞正確的索引路徑值。

無論在哪種情況下,您都可以在tableView:cellForRowAtIndexPath:方法中的某處正確設置按鈕。通常,我創建我的UITableViewCell子類以接受對象並使用該對象中的數據進行自我配置。這樣,我的UITableViewController中處理單元配置的代碼就更少了。

tableView:cellForRowAtIndexPath:典型的實現看起來是這樣的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    Cell *cell = [tableView dequeueReusableCellWithIdentifier:@"item" forIndexPath:indexPath]; 
    [cell configureForItem:self.dataSource[indexPath.row]]; 
    return cell; 
} 

您的每一個UITableViewCell實例都會有自己的按鈕,將通過物體在self.dataSource[indexPath.row]傳遞的數據進行配置。這樣,隨着電池被回收利用,按鈕不僅僅被傳遞,而且每當需要新的電池時,新的電池就會被回收和配置。

+0

謝謝你的工作 –

+0

太棒了!樂於幫助。 – mbm29414

0

在猜測,沒有看到您的更多的代碼,我會說你的問題是與您的使用indexPath.section代替indexPath.row

如果每個部分,然後將他們全部被覆蓋多個按鈕這段代碼。

相關問題