Разве шаблон декоратора обычно не основан на абстрактной базе или интерфейсе / протоколе в корне?Так как ваша база здесь не подлежит обмену (это должно быть UITableViewCell
), это может быть сложно.
Может быть, вы можете сделать это с помощью прокси, то есть создать подкласс NSProxy
, чтобы обернуть UITableViewCell
.Я не знаю, сработает ли это, поскольку классы UIKit, как правило, довольно тесно связаны друг с другом.Прокси и реальная ячейка будут иметь разные идентификаторы, и если ячейка отправляет сообщения в табличное представление с self
в качестве аргумента, это может привести к путанице в табличном представлении.
Другой вариант заключается в создании подкласса таблицыпросмотреть ячейку один раз, чтобы добавить какой-то расширяемый механизм делегатов, с помощью которого вы можете динамически добавлять делегатов в каждую ячейку.Я называю их делегатами, так как они не будут подклассами из ячейки таблицы, просто добавим поведение для этого.Затем вы будете перехватывать сообщения в ячейке и динамически решать, основываясь на делегатах, присутствующих в объекте, будет ли делегат получать сообщение или он поступит напрямую в реализацию метода суперкласса (UITableViewCell
).Вы могли бы определить протокол для каждого делегата, который объявляет новые методы / свойства, которые примет расширенная ячейка.
Я не знаю, сколько проблем это было бы реализовать в первую очередь, и насколько сложнокод для каждого делегата будет.Я полагаю, вам стоит попробовать, чтобы увидеть, стоит ли это на практике.
В любом случае, смешивание поведений с классами UIKit определенно было бы интересно и полезно.Для своих собственных приложений я построил автоматическую систему макетов представлений, которая выкладывает представления в зависимости от их содержимого, доступного пространства и определенных параметров изменения размера.Что-то вроде этого, вероятно, несколько уменьшит количество повторяющегося кода в этой системе.