Как стать автором
Обновить

Комментарии 31

Судя по всему, людям не нравится эта серия статей. Похоже, пора заканчивать :( а то ни кармы, ни времени на эти статьи не наберешься :(
Простите, но пока что это похоже на сборник вредных советов.
drawRect: предназначен для рисования, и использовать его для других целей слегка алогично, для вашей задачи больше подошел бы init* или awakeFromNib.
Бегать по сабвью тоже не самый лучший вариант, т.к. структура контрола от версии к версии может меняться, и при обновлении могут вылезти удивительные артефакты.
С drawRect: согласен, это плохо получилось.
А можете подсказать способ получше, дабы выудить определенный UIView из xib файла?
Я не до конца понял проблему которую вы решаете, возможно лучшего варианта и нет, но это жесткий хак, и по возможности таких решений нужно избегать.
По возможности нужно избегать, да. Но иногда из-за прихотей клиента приходится идти на такие уступки
Исправил часть с drawRect:, теперь используется awakeFromNib, спасибо.
Возможно, я что-нибудь еще упустил
и надо было написать не «записки фрилансера», а «записки разработчика под IOS» тогда уже, ибо лично я шел посмотреть, например, что нового во фрилансе я могу открыть для себя со стороны «надоело в офисе», а не мануал по разработке под неинтересную для меня платформу.
Может вы и правы. Хотя я фрилансер, а это мои записки. Похоже, если бы я разрабатывал на python или js, меня бы восприняли по-другому :(
Да и в первой части из серии я написал, почему это именно «Записки Фрилансера» и подробно описал, что занимаюсь Objective-C разработкой
Я хотел сделать ударение на том, что «фрилансер» далеко не только разработчик под iOS. У меня вот больше половины знакомых фрилансеров, но IOS'ом занимаются единицы. Так что серию статей стоит переименовать и уточнить что разработка под IOS, а не фриланс как таковой в независимости от направленности.
А я хотел сделать ударение на том, что фрилансер-разработчик под iOS — это тоже фрилансер. Про iOS я уточнил в первой части серии, в первом абзаце.
ну а я «Близнецы» и это мой комментарий.
Так уж и быть :) поменял название. Спасибо за совет!
В таком случае уберите и картинку, вводящую в заблуждение, что пост о фрилансе.
Аутлиты в PopupView.h нарушают инкапсуляцию, лучше бы там оставить property для всех title типа NSString
вызывать setTitle:forState: достаточно только для UIControlStateNormal

Я что-то не очень понял момент про restorationID, мне показалось, что он используется не по назначению. Имхо можно было завести аутлит на popup в контроллере и просто загрузить нужный bundle.

PopupController.m

@ interface PopupController()
@ property (nonatomic, strong) PopupView *popupView;
@ end

//…
@implementation PopupController

— (PopupView *)popupView
{
[[NSBundle mainBundle] loadNibNamed:@«PopupView.xib» owner:self options:nil];
PopupView *popup = self.popupView;
self.popupView = nil;
return popup;
}

@ end

аутлит заполнится, мы берем из него view, заниливаем аутлит для последующих загрузок и возвращаем popup.

ps. почему-то не получается заюзать тег source
Аутлиты в PopupView.h нарушают инкапсуляцию, лучше бы там оставить property для всех title типа NSString

Всеми руками за! Немножко упростил код для показательности.

вызывать setTitle:forState: достаточно только для UIControlStateNormal

Это правдиво, если клиент не захочет случайно поменять текст кнопки в Storyboard для состояния, скажем, Selected. Я уже привык такое перепроверять и предугадывать заезды клиентов :)

Я что-то не очень понял момент про restorationID, мне показалось, что он используется не по назначению. Имхо можно было завести аутлит на popup в контроллере и просто загрузить нужный bundle.

Позже можно добавлять другие типы всплывающих окон (например, с двумя кнопками) в тот же самый xib файл, но с другими restorationIdentifier.

Спасибо за комментарий!
>> Позже можно добавлять другие типы всплывающих окон (например, с двумя кнопками) в тот же самый xib файл, но с другими restorationIdentifier

В таком случае я бы всё равно сделал несколько аутлитов, всё равно все вьюхи будут загружены. А так можно будет избавиться от строковых идентификаторов, которые постоянно норовят перестать совпадать.
Хорошая идея, спасибо! Это вариант решения проблемы с меньшим количеством магических строк и без перебора вьюх внутри контроллера.
Учту.
Вы уверены, что делегат должен быть strong? Это же 99% приведет к reference cycle (контроллер ссылается на вид, вид на контроллер). По идее, здесь нужен weak.
@property (strong, nonatomic) UIViewController *delegate;
Конечно же, weak :) это мое упущение
на всякий случай поясню, что до вызова [[NSBundle mainBundle] loadNibNamed:...]; self.popupView был nil, а после загрузки бандла аутлит заполнится загруженной вьюхой
Спасибо! Поправил в статье
Не останавливайтесь, очень полезно как раз для разбирающихся в Objective C.

Нет планов какой-нибудь свой блог вести, я бы с удовольствием читал бы.
То что у Вас называется Core Graphics на самом деле самый настоящий Core Animation.
Но CGColor-то точно из раздела Core Graphics :)
Ну и еще сильная ссылка на delegate — нужно объяснить, почему она сильная и почему это не приведет к retain cycles.

Анимации при помощи UIView: все, что написано в блоке animations:, будет постепенно выполняться в течение установленного времени.


АААээээээ. Код в блоке animations выполнится мгновенно, только вот его выполнение приведет к созданию implicit animations, которые как раз и будут выполняться заданное время.
1. Я писал, что вдаваться в детали особо не буду, это серия статей о том, как быстро закончить заказ, а не как его полностью понять :) Про retain cycles уже написано достаточно литературы
2. Я упростил объяснение с уровня «знаю, как» до уровня «знаю, что»
Т.е. посты о том как схалтурить и сделать г***о на выходе? Очень полезное чтиво, да.
Жгите еще.
Не иронизируйте так сильно. Эта серия статей нужна, чтобы дать идею реализации механизмов разработчикам. Когда будет нужно, программист сам разберется в используемых технологиях.
Когда вы читаете туториал о синтаксисе языка, я не думаю, что вы ожидаете объяснения, как происходят арифметические операции на низком уровне.
Как насчет продолжения? Очень ждем, интересные темы.
Полностью поддерживаю!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации