2014-09-20 70 views
0

我知道這個問題有很多答案。但它沒有達到預期的結果。 didDEselectrow不起作用。我有一個UIImageView,我已經設置爲在cellforRowAtIndex中隱藏True。並且當某人選擇隱藏的任何行值設置爲false時。使用自定義UITableViewCell在UITableView中執行單行選擇?

**我的主要問題是當我選擇另一行時,上一行狀態不會改變,它也顯示選中。我附上了我的代碼所需的代碼片段,請檢查並幫助我完成此操作。 **

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    EventTypeTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Event_Type" forIndexPath:indexPath]; 

    cell.selectionStyle = UITableViewCellSelectionStyleNone; 

    if (cell.selectionStatus) 
     [cell.selectEvent setHidden:NO]; 
    else 
     [cell.selectEvent setHidden:YES]; 

    [cell.eventTypeName setText:[eventTypeName objectAtIndex:indexPath.row]]; 

    return cell; 
} 


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
EventTypeTableViewCell *cell = (EventTypeTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath]; 

    if(cell.selectionStatus == TRUE) 
    { 
     cell.selectionStatus = FALSE; 
    } 
    else 
    { 
]  cell.selectionStatus = TRUE; 
    } 
    [tableView reloadData]; 
} 

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    EventTypeTableViewCell *cell = (EventTypeTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath]; 
    if(cell.selectionStatus == FALSE) 
    { 
     //Do your stuff 
     cell.selectionStatus = TRUE; 
    } 
    else 
    { 
     //Do your stuff 
     cell.selectionStatus = FALSE; 
    } 
    [tableView reloadData]; 
} 

回答

0

我懷疑didDeselect沒有被調用,因爲你允許在你的tableView中有多個選擇。

您是否將表格視圖的選擇樣式設置爲「單選」?您可以做在Interface Builder /故事板或可以以編程方式做到這一點:

- (void) viewDidLoad { 
    self.tableView.allowsMultipleSelection = NO; 
} 

當您選擇另一行會取消舊的選擇這種方式。你也可以簡化你的代碼,每當單元格的選定狀態發生變化時不調用[tableView reloadData],使所有內容看起來更好。我建議的做法是每當單元格的選擇更改時,在EventTypeTableViewCell之內更改selectEvent的隱藏狀態。

這使得你這個:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    EventTypeTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Event_Type" forIndexPath:indexPath]; 

    [cell.eventTypeName setText:[eventTypeName objectAtIndex:indexPath.row]]; 

    return cell; 
} 

和你的EventTypeTableViewCell定義範圍內的一些方法覆蓋:

@implementation EventTypeTableViewCell 

/// Your code /// 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 
    self.selectEvent.hidden = !selected; 
} 

@end 
0

試試這個::

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 
} 

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone; 
} 
相關問題