Comments 12
Спасибо за NUI и UISS :)
0
Может быть мой вопрос слишком профанский, но почему бы не использовать для определения списка доступных свойств приведение типа указателя к указателю на объект своего класса?
0
Если я вас правильно понял, после приведения типов компилятор будет выдавать ровно тот список свойств, к типу которого вы привели. Т.е.
Скомпилится без ошибок, в реальности же приведет к крашу в случае, если передастся не UIButton, а UILabel (unrecognized selector).
Но, конечно же, можно сделать намного проще — все свойства являются также и селекторами, другими словами никто вам не запрещает написать так:
- (void) methodWithId:(id)theId
{
UIButton *button = (UIButton *)theId;
[button setText:@"Text" forControlState:UIStateNormal];
}
Скомпилится без ошибок, в реальности же приведет к крашу в случае, если передастся не UIButton, а UILabel (unrecognized selector).
Но, конечно же, можно сделать намного проще — все свойства являются также и селекторами, другими словами никто вам не запрещает написать так:
if([theId respondsToSelector:@selector(setText:forState:)]) {
}
0
Возникает резонный вопрос: зачем указатель на UILabel приводить к (UIButton*)? :)
0
Вам приходит id, вы не знаете на момент компиляции что туда придет.
0
Видимо, у меня просто не было таких ситуаций, так как я уже во время написания кода знаю что и куда мне придет. Хотя бы только потому что об этом можно спросить у Runtime.
0
ну да, isKindOfClass:. Но все же весьма и весьма нередки ситуации в больших проектах, когда это неочевидно. особенно если пишете что-то универсальное, какой-нибудь хитрый контрол.
0
В больших проектах, если не проверять класс контрола, какой-нибудь другой программист обязательно передаст вам что-нибудь такое, после чего вы будете отлаживать приложение в течение пары недель.
0
Надеюсь Apple будет добавлять поддержку большего числа методов. Только что решил два кейса через UIAppearance для UINavigationBar и задумался о кастомном UIToolBar, потому что выглядит как костыль:
кейс 1
заменить кнопку Back на маленькую картинку:
resizableImageWithCapInsets нужен для того чтобы нам не отресайзило картинку криво (фактически ее ресайзить не надо, но поскольку это bg image, то она растягивается по умолчанию)
кейс 2
убрать текст с кнопки Back (по дизайну не надо)
кейс 1
заменить кнопку Back на маленькую картинку:
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:[[UIImage imageNamed:@"back_nav_button"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.f, 21.f, 0.f, 5.f)]
forState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];
resizableImageWithCapInsets нужен для того чтобы нам не отресайзило картинку криво (фактически ее ресайзить не надо, но поскольку это bg image, то она растягивается по умолчанию)
кейс 2
убрать текст с кнопки Back (по дизайну не надо)
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment: UIOffsetMake(0.f, -44.f) forBarMetrics:UIBarMetricsDefault];
0
Создается впечатление, что в связи с выходом iOS7 необходимость в стилизации почти пропадет — ведь в ней эпл утверждает что реалистичный вид приложений (имитирующий объекты реального мира) это прошлый век.
0
Only those users with full accounts are able to leave comments. Log in, please.
UIAppearance. Управление внешним видом iOS-приложений