2012-07-04 2 views
0

этот вопрос касается «стиля», потому что я думаю, что это очень распространенная проблема, и я ищу элегантное решение. Я создал некоторый «продвинутый» UIView, и я стараюсь сделать их очень настраиваемыми. Обычно я создаю структуру UIView внутри настраиваемого метода init, но мне нужно знать значение всех настраиваемых параметров внутри метода init, поэтому иногда мне нужен очень длинный метод init, например:Правильный способ создания настраиваемого uiview

initWithFrame: color: font: verticalspace: verylonglist:

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

Мое фактическое лучшее решение - оставить пустой метод init и переместить все о макете внутри метода «configure». каждый раз, когда я получаю свойство, например, цвет фона или шрифт, я вызову этот метод, и я перестрою представление.

Я думаю, что есть лучший способ решить эту проблему ... Мне было бы интересно увидеть код UITableView Class, потому что с этим классом вы можете передать делегат вне метода init.

ответ

2

Проверьте что-то вроде UIButton или UILabel. У них обоих есть тонны настраиваемых аспектов, однако для простого создания экземпляра одного из этих объектов им требуется очень мало информации.

В общем, предоставьте методы init, которые позволяют потребителю вашего класса указывать наименьшее количество информации для работы класса.

Если вы хотите дать потребителю способ инициализировать класс с помощью набора значений, рассмотрите возможность использования своего рода метода initWithDictionary:, который принимает параметры NSDictionary. Это сокращает имена ваших методов и позволяет пользователю настраивать произвольное количество настроек для вашего класса.

Вы также можете рассмотреть возможность предоставления потребителю запроса экземпляра с некоторым стандартным набором значений. UITableViewCell, например, имеет метод initWithStyle:reuseIdentifier:. Важной частью является стиль - UITableViewCell предоставляет несколько стилей по умолчанию, таких как UITableViewCellStyleDefault и UITableViewCellStyleSubtitle.

0

Я не знаю, является ли это стандартным/лучшим способом, но я использую словарь в таких случаях и передаю его в инициализатор initWithDictionary. Было бы возможно также создать метод класса, который возвращает словарь типов по умолчанию, который затем может быть настроен (и набор делегатов), так что не каждый параметр необходимо указывать всякий раз, когда используется класс.

Смежные вопросы