UITableView Row Persistance - почему происходит сбой "didSelectRowAtIndexPath" - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть UITableView, который сохраняет выбранную строку в пользовательских настройках по умолчанию.tableView является частью структуры меню, которая может быть перезагружена в течение жизненного цикла приложения, поэтому я хочу постоянство между загрузками.В viewDidLoad этот UserDefault проверяется на существование, и я звоню

NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
    [self.tableView selectRowAtIndexPath:path animated:NO scrollPosition:(UITableViewScrollPositionMiddle)];

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

[self tableView:self.tableView didSelectRowAtIndexPath:path];

, я получу сбой - «нераспознанный селектор отправлен на экземпляр».Почему?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2012

UITableView работает через два протокола делегата, UITableViewDelegate и UITableViewDataSource .Класс, который определяет ваш UITableView, должен реализовывать эти протоколы, и вы должны установить делегат и источник данных UITableView на «self».Не следует вызывать методы протокола напрямую, что, скорее всего, является причиной вашего сбоя.

Чтобы выбрать конкретную строку на основе вашей модели данных (User Default), вам необходимо установить UITableViewCell выбрано свойство «ДА» в tableView: cellForRowAtIndexPath: для отображаемой строки.

Я рекомендую пройти этот урок, чтобы помочь вам лучше понять UITableView.

http://www.iosdevnotes.com/2011/10/uitableview-tutorial/

0 голосов
/ 03 февраля 2012

[self tableView:self.tableView didDeselectRowAtIndexPath:path] вызовет ВАШУ реализацию метода отмены выбора (определенного в UITableViewDelegate).

Вы получаете сбой, поскольку вы не реализовали его в своем делегате.

Вам следует позвонить: [self.tableView deselectRowAtIndexPath:path animated:NO];

...