Возникли проблемы с выбором строки в UITableViewCell

#ios #objective-c #uitableview

#iOS #objective-c #uitableview

Вопрос:

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

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *cellIdent = @"cell1111";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent];
if (tableView==_ShapeSelectionTable)
{

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [_ShapeSelectionTable dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    }

    if([_selectedShapeArray containsObject:[_shapeArray objectAtIndex:indexPath.row]] || [_selectedShapeArray containsObject:@"Check All"]) {

        cell.accessoryType = UITableViewCellAccessoryCheckmark;

    }
    else
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
  for (NSString *s in _shaperesultArray)
    {
        for (int i=0; i<self.shapeArray.count; i  )
        {
        NSIndexPath *myIdx=[NSIndexPath indexPathForRow:i inSection:0];
         ShapeInfo *shap=[self.shapeArray objectAtIndex:i];


            if ([shap.shape isEqualToString:s])
            {


                cell = [[self ShapeSelectionTable] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
                cell.accessoryType=UITableViewCellAccessoryCheckmark;
 //[tableView selectRowAtIndexPath:myIdx animated:TRUE scrollPosition:UITableViewScrollPositionNone];
 }
            else
            {
                cell.accessoryType=UITableViewCellAccessoryNone;
            }

        }
    }
 ShapeInfo *shap=[_shapeArray objectAtIndex:indexPath.row];

    cell.textLabel.text=shap.shape;

    return cell;
}
  

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

Друзья, у меня возникли проблемы с предварительной отметкой (принадлежность ячейки) из моих объектов JSON Обратите внимание, что я получаю этот вывод из Интернета в формате JSON. Любая помощь будет оценена..Спасибо

ОБНОВЛЕНИЕ, когда я запускаю этот код, получаю исключение, подобное ошибке утверждения в -[UITableView _configureCellForDisplay:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2935.137/UITableView.m:6509 2014-06-24 14:14:24.306 TheGemHubApp[2405:60b] * Завершение работы приложения из-за неперехваченного исключения ‘ Исключение NSInternalInconsistencyException’, причина:’Источник данных UITableView должен возвращать ячейку из TableView:cellForRowAtIndexPath:’**

введите описание изображения здесь

Ответ №1:

2935.137 / UITableView.m: 6509 2014-06-24 14:14:24.306 TheGemHubApp[2405:60b] Завершение работы приложения из-за неперехваченного исключения ‘NSInternalInconsistencyException’, причина: ‘Источник данных UITableView должен возвращать ячейку из TableView:cellForRowAtIndexPath:’*

Я приглашаю, чтобы это исключение произошло в этой строке кода

  cell = [[self ShapeSelectionTable] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
  

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

Комментарии:

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

2. Вы не должны использовать эту функцию: cell = [[self ShapeSelectionTable] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]; вы должны настроить только делегат UITableView: cellForRowAtIndexPath . И когда вы хотите обновить tableview: вы можете просто вызвать: [yourtable reloadData] или с помощью команды обновления строки

Ответ №2:

Вы не должны вызывать -selectRowAtIndexPath:animated: -cellForRowAtIndexPath: , вам не нужно выбирать строку, чтобы показать флажок.

Комментарии:

1. Привет @CarmeloS тогда как я могу добиться желаемого результата?

2. @NikunjKatharotiya вы просто устанавливаете cell.accessoryType , и в вашей ячейке появится флажок.

3. Я хочу, чтобы моя ячейка проверялась моим массивом данных JSON, который находится в _shapeResultArray

4. Ячейка не «запоминает» свое состояние, вместо этого вы должны настраивать ячейку при каждом отображении ячейки. Я не вижу ничего плохого в вашем измененном коде, могу я спросить, что вы подразумеваете под «проверкой ячейки»?

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