我希望在UILongPressGestureRecognizer事件中获取并保存来自单元格的数据。我正在尝试的是,当用户点击并按住很长时间后,将打开一个对话框(将有3个或更多按钮),用户可以选择保存特定的单元格数据,或从表格中删除该单元格或者去另一个屏幕。
以下是我为此目的使用的代码:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UILongPressGestureRecognizer *pressRecongnizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(tableCellPressed:)];
pressRecongnizer.minimumPressDuration = 0.5f;
[cell addGestureRecognizer:pressRecongnizer];
[pressRecongnizer release];
}
if ([tableView isEqual:self.searchDisplayController.searchResultsTableView]){
cell.textLabel.text =
[self.filteredListItems objectAtIndex:indexPath.row];
}
else{
cell.textLabel.text =
[self.groups objectAtIndex:indexPath.row];
}
return cell;}
- (void)tableCellPressed:(UILongPressGestureRecognizer *)recognizer{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Add to Favourites", @"Take to Map", @"Delete" ,nil] ;
[alert show];}
在这里,我想知道如何将数据保存到coreData?
答案 0 :(得分:2)
UIGestureRecognizer有一个view属性,表示它所附加的视图。
UITableViewCell *cell = (UITableViewCell *)[recognizer view];
NSString *text = cell.textLabel.text;
由于您在每个单元格上放置了手势识别器,因此您可以轻松使用上述代码来抓取特定单元格。
请注意,您必须实施UIAlertDelegate方法并暂时将数据保存在某个地方,因为用户选择的任何选项都会在单独的方法中反映出来。
编辑:
由于用户在UIAlertView中的选择是以不同的方法给出的,因此您必须保存对单元格的引用(无论您是创建indexPath的实例变量,单元格等等......都取决于您)
- (void)tableCellPressed:(UILongPressGestureRecognizer *)recognizer {
UITableViewCell *cell = (UITableViewCell *)[recognizer view];
self.myText = cell.textLabel.text;
self.currentCellIndexPath = [self.tableView indexPathForCell:cell];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Add to Favourites", @"Take to Map", @"Delete" ,nil] ;
[alert show];
}
要删除单元格,首先需要从数据源中删除它。到目前为止,您处于委托方法中:
if ([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Delete"]) {
[myArray removeObjectAtIndex:self.currentCellIndexPath]; // in this example, I saved the reference to the cell using a property
// last line of example code
}
现在您需要以两种方式之一更新表格视图。您可以通过调用:
立即刷新表格视图[self.tableView reloadData];
或者,如果你想要漂亮的删除动画表视图,你可以使用:
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:self.currentCellIndexPath] withRowAnimation:UITableViewRowAnimationFade];