2016-03-01 3 views
1

У меня есть подкласс UITableViewCell по имени ReminderCell.Возврат пользовательской ячейки UITableViewCell

ReminderCell имеет метод, называемый backToPlaceAnimation, который я написал.

Проблема заключается в том, например, если я хочу, чтобы позвонить backToPlaceAnimation на первом ReminderCell из RemindersVC с помощью tableView: cellForRowAtIndexPath: он не возвращает правильный объект (это UITableViewCell объект и не ReminderCell вообще).

Как я могу получить правильный объект?

Код:

журнал
NSIndexPath *cellIndexPath=[NSIndexPath indexPathWithIndex:0]; 

ReminderCell *cell=(ReminderCell*)[self tableView:self.AroundersTableView cellForRowAtIndexPath:cellIndexPath]; 

[cell cancelDeletion]; 

Крушения:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid index path for use with UITableView. Index paths passed to table view must contain exactly two indices specifying the section and row. Please use the category on NSIndexPath in UITableView.h if possible.

cellForRowAtIndexPath: переопределение:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //Creating a default cell using "cellIdentifier"(NSString) 
    ReminderCell *cell=[tableView dequeueReusableCellWithIdentifier:@"Cell"]; 
    if (cell==nil) { 
     cell=[[ReminderCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; 
    } 
    //Changing "cell"'s "index" to indexPath.row 
    cell.index=(int)indexPath.row; //Crashes here 

    [email protected]"Hello"; 

    //Returning cell 
    return cell; 
} 

Спасибо!

+0

Показать код, как вы получаете клетки от 'cellForRowAtIndexPath' –

+0

Вы. создавая ваш UITableView программно? –

+0

@ DantePuglisi Обновлено сообщение, пожалуйста, посмотрите –

ответ

1

Вы должны заменить [NSIndexPath indexPathWithIndex:0]; с [NSIndexPath indexPathWithIndex:0 inSection:0];

0

Вы объявляете cell как UITableViewCell, объявить его как ReminderCell, если вы хотите, чтобы это было что типа

+0

По-прежнему та же проблема, обновил сообщение, пожалуйста, посмотрите –

0

определить свою ячейку как ReminderCell

ReminderCell *cell = [self.AroundersTableView cellForRowAtIndexPath:cellIndexPath]; 
+0

, теперь вы можете позвонить [cell cancelDeletion]; – gvuksic

+0

По-прежнему та же проблема, обновленный пост, пожалуйста, посмотрите –

+0

является индексом в ReminderCell, определяемым как Indexpath? вы отправляете ему только одно значение, индексный путь состоит из двух значений: – gvuksic

0

Ваш CellForRowAtIndexPath должен вернуться ReminderCell вместо UITableViewCell

Поэтому он должен начинаться с этого:

-(ReminderCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
+0

Я не могу изменить 'cellForRowAtIndexPath', это функция делегата –

+0

Да, вы можете, я делал это много раз.Вы все еще возвращаете UITableViewCell, только подкласс этого –

0

Основываясь на приведенной выше ошибке, вы не возвращаете ячейку из ячейки для метода row, потому что путь указателя, который вы создаете, неверен. Попробуйте использовать [NSIndexPath indexPathForRow:0 inSection:0] (Примечание: вам нужно будет изменить 0, чтобы отразить ячейку, которую хотите

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