2012-01-12 4 views
1

Я хочу получить и сохранить данные из ячейки при событии UILongPressGestureRecognizer. То, что я пытаюсь, заключается в том, что когда пользователь кратковременно зажимает и удерживает его, откроется диалоговое окно (у которого будет 3 или более кнопки), у пользователя будет выбор для сохранения конкретных данных ячейки или для удаления этой ячейки из таблицы или перейти на другой экран.Сохранение данных из ячейки таблицы в UILongPressGestureRecognizer

Ниже приведен код, я использую для этой цели:

-(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?

ответ

2

UIGestureRecognizer имеет свойство вида, которое представляет собой вид, к которому прикреплен.

UITableViewCell *cell = (UITableViewCell *)[recognizer view]; 
NSString *text = cell.textLabel.text; 

Поскольку вы положили жест распознаватель на каждую клетку, вы можете легко использовать код выше, чтобы захватить определенную ячейку.

Обратите внимание, что вам нужно будет реализовать методы UIAlertDelegate и временно сохранить ваши данные, так как любой выбор, который выбирает пользователь, будет отражен отдельным методом.

Edit:

Поскольку выбор пользователя в 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]; 
+0

Thanx @Kevin Low –

+0

но одна часть мой вопрос оставлен, что это то, что я могу удалить конкретную ячейку из таблицы, если пользователь удаляет кнопку удаления из диалога –

+0

О, извините! Не заметил. Edited =). –

Смежные вопросы