Как реализовать «Обновление» и «перезагрузку» таблицы (переразложение кода)

#objective-c #cocoa-touch #ios #uitableview

#objective-c #cocoa-touch #iOS #uitableview

Вопрос:

У меня следующая ситуация:

1) 1 X PhotoTableViewController для отображения списка фотографий (по одной фотографии на ячейку), как Instagram

2) Кнопка обновления на панели навигации PhotoTableViewController для перезагрузки таблицы (вверху справа)

3) Кнопка выбора на панели навигации PhotoTableViewController для выбора списка опций, например «Последние фотографии, самые популярные и т.д.) (вверху слева)

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

4) Ячейку «Загрузить больше» в конце списка (не более 20 фотографий), чтобы добавить следующий набор фотографий в табличное представление.

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

Фотографии получены с сервера и поставляются в виде файла JSON.

Запрос: Я полагаю, что все 3 кнопки (пункты 2,3 и 4) по сути хотят сделать одно и то же, то есть обновить и перезагрузить таблицу. Также я понимаю, что это обычная практика в нескольких приложениях, поэтому я хотел бы посоветовать следующее

1) Как мне реализовать такого рода методы «Обновления» и «перезагрузки» наиболее эффективным способом без повторения кода.

2) После того, как я нажимаю каждую кнопку, намерение состоит в том, чтобы иметь своего рода «Пустую страницу» со счетчиком и показывать только перезагруженную таблицу после завершения обработки. Я подумываю о том, чтобы запустить текущий контроллер tableview в момент нажатия кнопки и вернуть новый контроллер обратно после завершения обработки. Имеет ли это смысл? Или есть лучший способ сделать это?

Ответ №1:

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

 {
"cursor": {
    "currentPageIndex":0,
    "estimatedNumberOfHits":351,
    "pages":[{
        "label":"1",
        "offset":0
    },{
        "label":"2",
        "offset":10
    },{
        "label":"3",
        "offset":20
    }]
},
"details":"",
"data":[{
    "id":709,
    "modifiedOnTimestamp":1304009527000,
    "state":"California",

    "city":"Santa Monica",
}]
  

Создайте сетевой вызов в одном месте (на стороне iOS), который передает номер результата, который вы хотите следующим. Затем, когда вы обрабатываете JSON, они вызывают call reloadData в табличном представлении.

Ответ №2:

Сработает ли это?

 -(IBAction)reloadTableOnButtonPress:(id)sender {

    // Present a dark modalView

    [tableView reloadData];

    // Trigger to dismiss modalView

}
  

Ответ №3:

[tableView reloadData] должно сработать. Этот метод повторно запускает все методы делегирования и источника данных в таблице и соответствующим образом обновляет внешний вид таблицы.