Выбор различных UITableViewCells в зависимости от доступного содержимого текста или изображения - PullRequest
0 голосов
/ 23 августа 2011

Я хочу отображать различные UITableViewCell s в зависимости от того, какой контент доступен.Как мне это сделать?

Пример:

Допустим, у меня есть пользовательский UITableViewCell, у которого contentView есть UILabel, UITextField и UIImageView как подпредставления.UILabel расположен в верхней части ячейки, над UIImageView, который находится рядом с UITextField.В зависимости от того, какое содержимое для этих видов доступно, я хотел бы отображать только доступные части и увеличивать другие виды.Например: если отсутствует контекст UILabel, я не хочу, чтобы в верхней части ячейки было пустое место.Если у меня нет изображения, текстовое поле должно начинаться с самой левой стороны ячейки.

Там должно быть много газетных / телевизионных приложений, которые должны были решить точно такую ​​же проблему ...

Подходы:

(i) Использование той же пользовательской ячейки, где я каким-то образом переставляю подпредставления

(ii) Вызов различных пользовательских UITableViewCell в зависимости от того, какой контент доступен

Для обоих подходов у меня возникают проблемы с поиском пути для решения этой проблемы.Мой UITableView размер контента является динамическим и может иметь несколько строк или много.

Есть ли какой-то другой подход, который я пропускаю или нет, какой подход является наилучшей?

Ответы [ 2 ]

2 голосов
/ 23 августа 2011

Ваша (ii) идея - это путь, который мне приходит в голову. Как вы говорите, вы проектируете две обычаи UITableViewCell (.m, .h и .xib), которые вы не забыли определить там CellIdentifier в интерфейсе Builder, и когда ваш делегат tableView:cellForRowAtIndexPath: вызывается, вы выбираете dequeueReusableCellWithIdentifier: соответствующий шаблон UITableViewCell.

1 голос
/ 23 августа 2011

Любой подход работает, хотя я, вероятно, предпочел бы (i) .

Для (i) повторное использование легко.Просто убедитесь, что вы очищаете старые данные при повторном использовании, попросите метод layoutSubviews вашего UITableViewCell выложить подвиды соответствующим образом, чтобы соответствовать любым доступным данным, и обязательно вызовите setNeedsLayout при изменении данных.Преимущество здесь в том, что остальной части вашего кода не нужно заботиться о том, какие данные доступны или нет, и вашей таблице, возможно, даже не нужно заботиться, если в ячейку неожиданно добавляется изображение (если только ему не нужно знать, что ячейкавысота изменилась или что-то).Недостатком является то, что реализация ячейки является более сложной, и макет не может быть полностью определен в IB.

Для (ii) каждый отдельный пользовательский тип UITableViewCell должен иметь свой собственный reuseIdentifier, а затем используйте dequeueReusableCellWithIdentifier: с идентификатором, соответствующим доступным данным.Преимущество здесь состоит в том, что отдельные типы ячеек проще (и, вероятно, это можно сделать полностью в IB), тогда как недостатком является то, что вам нужно иметь несколько из них для каждой возможной комбинации доступных данных.Кроме того, вам понадобится UITableView перезагрузить ячейку (например, используя reloadRowsAtIndexPaths:withRowAnimation:), если тип должен измениться.

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