#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 контроллер не является подходящим местом для хранения состояния модели.