Nano Hash - криптовалюты, майнинг, программирование

Есть ли какие-либо преимущества в использовании UITableViewController по сравнению с UIViewController, который реализует делегат табличного представления и методы источника данных?

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

  1. Создайте новый UITableViewController
  2. Создайте новый UIViewController, реализующий протоколы UITableViewDelegate и UITableViewDataSource.

Предполагая, что я правильно реализую все обязательные и необязательные методы для протоколов, есть ли какие-либо преимущества (кроме того, что не нужно писать заглушки методов) для использования UITableViewController? означает, есть ли что-нибудь (управление памятью, кэширование и т. д.), реализованное за кулисами в классе UITableViewController, что делает вариант 1 лучшим выбором, чем вариант 2?

22.01.2013

  • один недостаток Uitableviewcontroller заключается в том, что добавление дополнительных вещей не означает, например, 1: баннер ADMOB 26.12.2018

Ответы:


1

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

Есть только две возможные причины, по которым вы должны использовать UIViewController вместо UITableViewController, когда вам нужен контроллер представления с табличным представлением:

  1. Вам нужно, чтобы табличное представление было меньше, чем представление контроллера представления.
  2. Вам нужно добавить дополнительные представления в контроллер представления, которые не прокручиваются вместе с табличным представлением (хотя есть способы решить эту проблему с помощью UITableViewController).

Вот все, что UITableViewController делает для вас, и что вам нужно воспроизвести:

  1. Определяет и настраивает файл UITableView.
  2. Устанавливает себя в качестве источника данных и делегата табличного представления.
  3. Переопределяет метод setEditing:animated:, чтобы также установить свойство editing табличного представления.
  4. Отменяет выбор последней выбранной строки в методе viewWillAppear: в зависимости от свойства clearsSelectionOnViewWillAppear.
  5. Мигает полосы прокрутки табличного представления в методе viewDidAppear:.
  6. Подключает элемент управления обновлением (начиная с iOS 6).
  7. Перезагружает табличное представление при первом его появлении.
  8. Настраивает contentInset табличного представления (начиная с iOS 7).
  9. Прокручивает представление таблицы по мере необходимости, когда появляется клавиатура.
22.01.2013
  • Спасибо, список необходимости тиражирования был выше и выше. 03.02.2015
  • UITableViewController также обрабатывает настройку contentInset табличного представления и прокрутку первого респондента в поле зрения, когда клавиатура отображается и скрывается. 14.05.2016
  • @robmayoff Хорошие моменты. Хотя, когда на этот вопрос был дан первоначальный ответ, iOS 6 была последней, и тогда ничего не было за панелями навигации и панелями инструментов, поэтому contentInset тогда не применялось. Это изменилось в iOS 7. 14.05.2016
  • В списке по-прежнему не упоминается, что contentInset корректируется, когда клавиатура отображается и скрывается. Это позволяет прокручивать и видеть нижнюю часть таблицы, когда клавиатура поднята. Это отличается от № 8, который относится к навигационным панелям и панелям инструментов, и № 9, который относится к активации текстового поля. 28.01.2017
  • Я заметил, что прикосновение к строке состояния прокручивает таблицу вверх. Однако простой UITableView тоже делает это, так что это не считается. Возможно, идея составить список одинаковых вещей? 28.01.2017

  • 2

    Преимущество клавиатуры с 0 строками кода

    UITableViewController обеспечивает автоматическую прокрутку при появлении экранной клавиатуры, а обычная UIViewController — нет.

    UITableViewController надежно перемещает редактируемую область в поле зрения без необходимости возиться с уведомлениями клавиатуры. Так было на заре iOS, в то время как уведомления клавиатуры изменились, редко обеспечивая обратную совместимость.

    Всякий раз, когда представление требует редактирования (например, экран входа), рассмотрите возможность использования UITableViewController и используйте эту уникальную функцию ровно 0 строк кода.

    К сожалению, обычный UIViewController, использующий протокол UITableViewDelegate, не предлагает эту функциональность.

    UITableViewController

    Работает с момента появления iPhone OS до сегодня.

    ► Найдите это решение на GitHub, а дополнительную информацию — на Быстрые рецепты.

    04.09.2015
  • Действительно?? Я использую UITableViewController, и автопрокрутка не работает. Панель инструментов внизу блокирует эту чудесную функциональность? 21.03.2016
  • UIToolBar не будет мешать, если он находится внутри иерархии UITableView. Если вам удалось прикрепить полосу к нижней части, вы, вероятно, обошли UITableViewController, отсюда и поведение, о котором вы сообщаете. Попробуйте прилагаемый проект и поэкспериментируйте с ним! 22.03.2016

  • 3

    UITableViewController позволяет иметь статическую таблицу на iOS5

    22.01.2013
  • Что это вообще значит? 12.11.2017
  • вы можете создавать ячейки в IB и не иметь источника данных 14.12.2017

  • 4

    Единственное, что есть у UITableViewController и чего нет у обычного UIViewController, это свойство tableView, и оно соответствует протоколам UITableViewDelegate и UITableViewDataSource. Ad RolandasR указывает, что установка контроллера представления как (потомка) UITableViewController также позволяет использовать статические ячейки таблицы.

    22.01.2013

    5

    Основным преимуществом использования UITableViewDelegate является простота. Однако есть преимущества в создании собственного TableViewController, который не предполагает, что представление является таблицей:

    1) Вы можете добавить другие элементы и сделать так, чтобы таблица занимала меньшую часть экрана. 2) Вы можете добавить целую кучу вспомогательных методов, доступных для всех VC, которые происходят от вашего контроллера. Я реализую вспомогательные методы для автоматического возврата высоты строки, когда у меня есть разные типы UITableViewCell, а также для автоматической регистрации различных ячеек, методов для получения ссылки на ячейку из CGPoint в таблице, обратных вызовов pull-to-refresh и т. д.

    Хотя вы всегда можете получить от UITableViewController и добавить вспомогательные методы, я думаю, что основное преимущество заключается в том, что таблица не занимает все представление.

    22.01.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..