UITableView редактирование Сомнения - PullRequest
0 голосов
/ 01 марта 2012

У меня есть этот код для удаления содержимого ячейки из базы данных

- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [appDelegate.indexArray removeObjectAtIndex:indexPath.section];
        [appDelegate.notesArray removeObjectAtIndex:indexPath.section];
        [tableViewObj reloadData];
        NSString *DataPath = [MyBibleAppAppDelegate getPath];
        [appDelegate.data writeToFile:DataPath atomically:YES];
        [tableViewObj reloadData];
    } 
}

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

-(IBAction)_clickbtndeltNoteall:(id)sender
{
            [appDelegate.indexArray removeObjectAtIndex:indexPath.section];
            [appDelegate.notesArray removeObjectAtIndex:indexPath.section];
            [tableViewObj reloadData];
            NSString *DataPath = [MyBibleAppAppDelegate getPath];
            [appDelegate.data writeToFile:DataPath atomically:YES];
            [tableViewObj reloadData];
}

Но я получил эту ошибку: «Необъявленный идентификатор indexpath».Как это решить?

Ответы [ 5 ]

1 голос
/ 01 марта 2012

Я предлагаю сохранить indexPath для нажатой строки в одиночном коде. Вот руководство по использованию одноэлементного класса для хранения объектов и их использования в разных классах.

В этом примере вы также можете просто объявить переменную экземпляра и установить ее при нажатии строки в соответствующем методе делегата для вашего UITableView . Это можно сделать так:

@interface

NSIndexPath *tableViewPath;

@implementation

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

tableViewPath = indexPath;

}

Ваше действие для вашей кнопки теперь должно выглядеть следующим образом:

- (IBAction)_clickbtndeltNoteall:(id)sender
{
       [appDelegate.indexArray removeObjectAtIndex:indexPath.section];
       [appDelegate.notesArray removeObjectAtIndex:indexPath.section];
       [tableViewObj reloadData];
       NSString *DataPath = [MyBibleAppAppDelegate getPath];
       [appDelegate.data writeToFile:DataPath atomically:YES];
       [tableViewObj reloadData];
}

Код для кнопки предполагает, что строка была выбрана до ее нажатия. Вы также можете инициализировать indexPath в viewDidLoad вот так:

@implementation

- (void)viewDidLoad {

tableViewPath = [NSIndexPath indexPathForRow:0 inSection:0];

}

Вы должны настроить инициализацию в соответствии с вашей конкретной программой!

1 голос
/ 01 марта 2012

indexPath не определено в _clickbtndeltNoteall, поэтому вы получаете эту ошибку.

Вы можете сделать что-то вроде

-(IBAction)_clickbtndeltNoteall:(id)sender
{
        [appDelegate.indexArray removeObjectAtIndex:index];
        [appDelegate.notesArray removeObjectAtIndex:index];
        [tableViewObj reloadData];
        NSString *DataPath = [MyBibleAppAppDelegate getPath];
        [appDelegate.data writeToFile:DataPath atomically:YES];
        [tableViewObj reloadData];
}

, где index определено где-то еще (поле класса, например).Вы можете использовать вспомогательный метод для установки index, чтобы указать раздел, который вы хотите удалить, затем вызвать _clickbtndeltNoteall

1 голос
/ 01 марта 2012

Какую ячейку вы хотите удалить при нажатии кнопки?

Добавить:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowToDelete inSection:sectionToDelete];

На вершине вашего метода.

0 голосов
/ 01 марта 2012
-(IBAction)_clickbtndeltNoteall:(id)sender
{    
UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
    NSIndexPath *clickedButtonPath = [tableViewObj indexPathForCell:clickedCell];
    int section1=clickedButtonPath.section;
 [appDelegate.indexArray removeObjectAtIndex:section1];
            [appDelegate.notesArray removeObjectAtIndex:section1];
            [tableViewObj reloadData];
            NSString *DataPath = [MyBibleAppAppDelegate getPath];
            [appDelegate.data writeToFile:DataPath atomically:YES];
            [tableViewObj reloadData];
}

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

0 голосов
/ 01 марта 2012

Вы обращаетесь к переменной indexPath внутри вашего - (IBAction) _clickbtndeltNoteall: (id) отправителя, и это невозможно, так как переменная не существует в этой области.глобальная переменная, а потом вы к ней обращаетесь?Примерно так:

    - (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

        if (editingStyle == UITableViewCellEditingStyleDelete) {      
        lastIndexPath = indexPath;
        //Your code
        }
}

И в вашей декларации interfaz вы добавляете:

NSIndexPath *lastIndexPath;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...