2013-10-01 2 views
-2

Я разрабатываю приложение и для применения глобального формата, для этого я добавил следующие строки ниже моего файл appDelegate.mусловные глобальный формат UIButton в прошивкой

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

    [self customizeAppearance]; 

    return YES; 
} 

-(void)customizeAppearance{ 

    int iOSVersion = [[[UIDevice currentDevice]systemVersion] intValue]; 

    if (iOSVersion >= 7) { 

     //Customizing UIButton 
     [[UIButton appearance]setBackgroundColor:(UIColorFromRGB(toolbarTintColor))]; 
     [[UIButton appearance]setTitleColor:(UIColorFromRGB(toolbarTextColor)) forState:UIControlStateNormal]; 

     } 

    if (iOSVersion < 7) { 

     //Customizing UIButton 
     [[UIButton appearance]setBackgroundImage:[UIImage imageNamed:@"Button.png"] forState:UIControlStateNormal]; 
    } 
} 

Я эти два стиля в зависимости версии iOS, которая меняет стиль UIbutton, но я хочу, чтобы она была применена только к UIButtons, а не UIBarButtonItems - это возможно?

Выполнение этого шага дальше Я хочу применить глобально этот формат только к UIButtons внутри элементов UIView (не в UITableViewCells или так), что это можно сделать ???

заранее спасибо за поддержку

ответ

1

То, как вы это делаете, должно работать так, как вы описали. UIBarButtonItem не наследует от UIButton, как предполагает название. Это означает, что при использовании протокола UIAppearance в UIButton изменения, которые вы внесли, не будут влиять на любой экземпляр UIBarButtonItem.

NSObject >> UIBarItem >> UIBarButtonItem

NSObject >> UIResponder >> UIView >> UIControl >> UIButton

И ответить на ваш второй вопрос, вы, вероятно, лучше всего создавая подкласс UIButton для настройки, если вы хотите только, чтобы настройка была применена в определенных экземплярах кнопки. Делая это, вы можете добавить логику в подкласс, чтобы изменить его внешний вид в зависимости от класса его супервизора. Это может быть сделано с использованием чего-то вроде этого:

[self.superview isKindOfClass:[UITableViewCell class]]; 

Или, если вы все еще хотите использовать UIAppearance см @ ответ Null для примера.

+0

спасибо за ответ !!! посмотрите, когда я попытаюсь с помощью [self.superview isKindOfClass: [UITableViewCell class]] он говорит: «Свойство« супервизор »не найдено на объекте AppDelegate» –

+1

@juandejesusss Это не сработает. Это код, который вы использовали бы в подклассе UIButton. –

1

Вы можете использовать ниже прокси:

[[UIButton appearanceWhenContainedIn:[MyView class], nil] setBackgroundColor:[UIColor greenColor]]; 

Для получения дополнительной информации проверить this.

Кстати внешний вид для UIButton не меняет внешний вид для UIBarButtonItems.

+0

отлично работает с одним классом, но что делать, если мне нужен этот формат для двух или более: [[Внешний вид UIButtonWhenContainedIn: [classVC1 class], [classVC2 class], nil] setTitleColor: (UIColorFromRGB (toolbarTextColor)) forState: UIControlStateNormal]; это не работает или требуется добавить строку кода для каждого класса? –

+0

Этот массив представлений представляет собой иерархию сдерживания, это не список контейнеров, делая это, вы говорите, что кнопка, содержащаяся в classVC1, содержится в классеVC2. Вам нужно разбить этот массив. 'добавить строку кода для каждого класса'. – null

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