Определите последнюю выбранную строку при возврате из DetailView в UITableView

#objective-c #cocoa-touch #uitableview

#цель-c #cocoa-touch #uitableview ( пользовательский просмотр ) #objective-c #uitableview

Вопрос:

Хорошо, я нажимаю DetailView, когда строка выбрана в UITableView. В DetailView я устанавливаю som-данные и передаю их веб-сервису. Я хочу извлечь некоторые данные либо до отправки DetailView, либо когда они исчезнут. На основе полученных данных я установлю UIImage в качестве индикатора.

Интересно, как я могу определить indexpath.row, для которого был нажат DetailView, и использовать это для настройки UIImage. Возможно ли это?

У меня есть UISegmentedControl, который загружает два разных источника данных для UITableView.

Для тестирования я передаю indexpath.row при нажатии DetailView и обратном вызове класса UITableView вместе с логическим значением, если должно отображаться UIImage.

Но моя проблема в том, что indexpath.row равен 0 при загрузке UITableView. И при изменении источника данных взад и вперед и передаче с ним indexpath.row индикатор будет отображаться в неправильных строках.

Двумя источниками данных для таблицы являются:

 if (index == 0) {

    dictionary = [firstArray objectAtIndex:indexPath.row];
}
else {

    dictionary = [secondArray objectAtIndex:indexPath.row]; 
}
  

Затем я устанавливаю индикатор для этой строки (позже будет UIImage).:

 if (indexPath.row == selectedIndex) {
    cell.indicator.text = @"Begin";
}
  

Когда DetailView помещается в didSelectRowAtIndexPath, я передаю indexPath.row:

 NSInteger rowIndex = indexPath.row;
[self.detailViewController initWithDetailsSelected:rowIndex:dictionary];
  

Когда DetailView выполнен, класс UITableView получает обратный вызов:

  - (void)processAttendanceSuccessful:(BOOL)successful:(NSInteger)_selectedIndex{

self.selectedIndex = _selectedIndex;
 }
  

Таким образом, на основе логического значения UIImage должно отображаться для правильной строки в UITableView.
Любые предложения, как я могу это сделать. Должно быть, довольно часто устанавливать некоторое значение в detailedView и отображать некоторые данные для определенной строки в UITableView, но для этого довольно сложно найти какие-либо хорошие учебные пособия.
Я только нахожу, как передать данные в DetailView, с чем у меня нет никаких проблем.

Заранее спасибо людям.

Ответ №1:

Не отменяйте выбор строки в tableView:didSelectRowAtIndexPath: . Когда вы вернетесь к этому контроллеру представления, просто используйте indexPathForSelectedRow метод UITableView объекта.

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

Ответ №2:

Я бы использовал ivar из int, используя отрицательные значения для представления нулевого выбора:

 @interface MyController : UIViewController {

int lastSelection;

}
...
@end

@implementation MyController
...
- (void)initWithBlablabla{
    ...
    lastSelection = -1;
}

...

@end
  

Однако, я думаю, вам лучше пересмотреть свой дизайн, обратившись к руководству по программированию KVO. В общих шаблонах MVC контроллер не является подходящим местом для хранения состояния модели.