Highjack或阻止UITableView didSelectRowAtIndexPath

时间:2012-06-20 16:35:39

标签: objective-c ios uitableview didselectrowatindexpath

我正试图找到一种方法来预防或劫持didSelectRowAtIndexPath:。当用户在tableview中选择一行时,我想首先抛出一个警告视图,说“如果你这样做,将从CD中删除数据”。 “如果你继续,我们将把数据同步到服务器。”

用户点击是继续。我希望防止在同步完成之前选择新单元格。如果同步失败,我想弹出警告告诉用户它失败然后停止didSelectRowAtIndexPath:发射,从而阻止他们触摸的新单元被选中。

如果同步成功,我希望调用didSelectRowAtIndexPath:

最好的方法是劫持willSelectRowAtIndexPath:吗?

2 个答案:

答案 0 :(得分:5)

实施委托方法

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

并返回相关indexPath的<{1}}

这将停止选择相关的单元格。

来自nil

的文档
  

返回值确认或更改所选内容的索引路径对象   行。如果需要,返回除indexPath之外的NSIndexPath对象   另一个要选择的单元格。如果你不想要这行,则返回nil   地选择。

答案 1 :(得分:0)

知道了。

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {

UITableView *roomTable = tableView;
Rooms *room = [roomArray objectAtIndex:indexPath.row];
NSString *message = [NSString stringWithFormat:@"Switching rooms will remove data for current thing. Need to download %@ room", room.name];
[UIActionSheet actionSheetWithTitle:message 
                            message:@"Message" 
             destructiveButtonTitle:@"Continue" 
                            buttons:[NSArray arrayWithObjects:nil]
                         showInView:self.view 
                          onDismiss:^(int buttonIndex)
 {
     NSLog(@"User selected to change the room");
     [roomTable selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
 }
                           onCancel:^
 {
     NSLog(@"Change Room Cancelled");
 }];

return nil;   
}