2014-03-04 30 views
0

我需要在我的应用程序中选择正确的单元格后禁用选择其他单元格。
所以,如果用户选择错误的答案,他可以选择其他单元格,但是如果选择正确的答案,他不能这样做。
帮我解决我的问题。 我的代码是:在didSelectRowAtIndexPath后禁用选择其他单元格

- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { 

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
NSInteger rowNumber = [indexPath row]; 
NSArray *array = [self getAnswers]; 
if (rowNumber == 0) 
{ 
    cell.contentView.backgroundColor = [UIColor whiteColor]; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
} 
if (rowNumber == [array[array.count - 2] intValue]) 
{ 
    cell.contentView.backgroundColor = [UIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:1.0]; 
    [_rightAnswersArray addObject:[NSNumber numberWithInt:_index+1]]; 
    NSLog(@"rightAnswersArray = %@",_rightAnswersArray); 
    for (rowNumber = 1; rowNumber < array.count - 1; rowNumber++) 
    { 
     cell.userInteractionEnabled = NO; 
    NSLog(@"%hhd",cell.userInteractionEnabled); 
    } 
} 
else 
{ 
    cell.contentView.backgroundColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0]; 
    [_wrongAnswersArray addObject:[NSNumber numberWithInt:_index+1]]; 
    NSLog(@"wrongAnswersArray = %@",_wrongAnswersArray); 
    [self showComment]; 
} 
} 

UPD:解决此代码。

if (rowNumber == [array[array.count - 2] intValue]) 
{ 
cell.contentView.backgroundColor = [UIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:1.0]; 
[_rightAnswersArray addObject:[NSNumber numberWithInt:_index+1]]; 
NSLog(@"rightAnswersArray = %@",_rightAnswersArray); 
for (rowNumber = 1; rowNumber < array.count - 1; rowNumber++) 
self.tableView.allowsSelection = NO; 
} 

回答

2

你应该实现UITableViewDelegate方法

// Called before the user changes the selection. Return a new indexPath, or nil, to change the proposed selection. 
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath; 

它应该是这样的

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return _isRightAnswerAlreadySelected ? nil : indexPath; 
} 

_isRightAnswerAlreadySelected(void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath

成立
相关问题