Обычный код
В этом файле .xib нет ничего, что нельзя было бы создать «вручную» в обычном коде Objective-C. Как вы, вероятно, уже убедились при работе с Interface Builder, строить интерфейс в .xib обычно намного проще, чем на программном уровне, так что при создании нового представления обычно создается соответствующий файл .xib. Однако теоретически можно построить целое приложение вообще без файлов .xib. Мы используем промежуточное решение: создаем новое представление, но используем описание пользовательского интерфейса из другого представления.
Тогда почему врезка «Будьте осторожны» предупреждает против повторного использования .xib? Это вообще хорошо или плохо?
Это зависит от ситуации. В приложении DrinkMixer мы можем повторно использовать представление DetailDrinkView и его .xib, потому что макеты представлений выглядят одинаково, a DetailDrinkView не выполняет никаких специфических операций. Однако в более сложном приложении могут возникнуть проблемы: вам придется постоянно переключаться между двумя контроллерами представлений или же открыть субклассу так много информации, что сильно затруднит сопровождение кода. Данная проблема не уникальна для iOS-программирования: субклас- сирование всегда требует осторожности. В нашем приложении субклассирование работает успешно; его также можно увидеть в некоторых примерах приложений Apple (одна из причин, по которым мы используем его). Но не менее вероятна и другая ситуация: если представления должны быть похожими, но не полностью совпадающими, лучше создать новый контроллер представления и .xib.
Весь код инициализации ячеек обычно находится в cellForRowAtlndexPath?
Это зависит от сложности табличного представления и ячеек. Если конфигурация ячеек проста — да, конечно. При усложнении табличного представления (и особенно при использовании группированных табличных представлений с разными ячейками) такое решение становится громоздким. Лучше определить вспомогательные методы для инициализации конкретных типов ячеек. Еще один важный момент: сброс ячейки в состояние по умолчанию. Метод cellForRowAtlndexPath всегда должен выполнять его перед использованием ячейки; вы просто не знаете, в каком состоянии находилась ячейка ранее. Конечно, этот код тоже можно выделить во вспомогательный метод; главное, не забудьте сделать это!
- Дата: 18-12-2014, 16:55