¿Qué propiedades puedo establecer a través de un proxy UIAppearance?
78
¿Qué propiedades puedo establecer a través de un proxy UIAppearance? La documentación UIKit de Apple no los enumera. ¿Existe una lista de estas propiedades?
Mattt Thompson proporcionó un excelente artículo sobre ese tema en NSHipster: nshipster.com/uiappearance
Pierre
Respuestas:
212
Las propiedades que se pueden configurar a través de UIAppearance se etiquetan con UI_APPEARANCE_SELECTORen el archivo de encabezado correspondiente.
Para generar una lista de propiedades etiquetadas con UI_APPEARANCE_SELECTOR, puede usar los siguientes comandos de Unix en una terminal:
cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/UIKit.framework/Headersgrep-HUI_APPEARANCE_SELECTOR ./* | sed 's/ __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0) UI_APPEARANCE_SELECTOR;//'
Aquí hay una lista que compilé usando los comandos anteriores. Esto es para el SDK 5.0. Los métodos de obtención correspondientes se han omitido por brevedad.
(3 de julio de 2012) : esta lista no ha cambiado hasta la versión más reciente de XCode (4.3.3).
(12 de marzo de 2013) : Lista actualizada para SDK 6.1. Las propiedades que se aplican a iOS 6.0 (o superior) se enumeran debajo de la [iOS 6.0]etiqueta.
(24 de octubre de 2013) : Lista actualizada para SDK 7.0. Las propiedades que se aplican a iOS 7.0 (o superior) se enumeran debajo de la [iOS 7.0]etiqueta.
Me sorprende que UIButtonno tenga ninguna UI_APPEARANCE_SELECTORpropiedad, pero se ajuste al UIAppearanceprotocolo. ¿Es esto un descuido de Apple?
Emile Cormier
3
He buscado esa lista sin encontrarla. La macro UI_APPEARANCE_SELECTOR tampoco parece ser la historia completa, ya que UIView.h no la usa (5.0, al menos) y, sin embargo, el siguiente código funciona: [[apariencia UIView] setBackgroundColor: [UIColor redColor]];
Phillip Mills
2
Con App Store Xcode e iOS 5.1, la ruta del encabezado ahora es: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/UIKit. framework / Headers
Erik
2
Úselo xcode-select --print-pathpara obtener la ruta al directorio de desarrolladores.
Pascal
para XCode 4.5 es: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/
Respuestas:
Las propiedades que se pueden configurar a través de UIAppearance se etiquetan con
UI_APPEARANCE_SELECTOR
en el archivo de encabezado correspondiente.Para generar una lista de propiedades etiquetadas con
UI_APPEARANCE_SELECTOR
, puede usar los siguientes comandos de Unix en una terminal:cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/UIKit.framework/Headers grep -H UI_APPEARANCE_SELECTOR ./* | sed 's/ __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0) UI_APPEARANCE_SELECTOR;//'
Aquí hay una lista que compilé usando los comandos anteriores. Esto es para el SDK 5.0. Los métodos de obtención correspondientes se han omitido por brevedad.
UIActivityIndicatorView
@property (readwrite, nonatomic, retain) UIColor *color
UIBarButtonItem
@property(nonatomic,retain) UIColor *tintColor - (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics - (void)setBackgroundVerticalPositionAdjustment:(CGFloat)adjustment forBarMetrics:(UIBarMetrics)barMetrics - (void)setTitlePositionAdjustment:(UIOffset)adjustment forBarMetrics:(UIBarMetrics)barMetrics - (void)setBackButtonBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics - (void)setBackButtonTitlePositionAdjustment:(UIOffset)adjustment forBarMetrics:(UIBarMetrics)barMetrics - (void)setBackButtonBackgroundVerticalPositionAdjustment:(CGFloat)adjustment forBarMetrics:(UIBarMetrics)barMetrics [iOS 6.0] - (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state style:(UIBarButtonItemStyle)style barMetrics:(UIBarMetrics)barMetrics [iOS 6.0]
UIBarItem
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state
UINavigationBar
@property(nonatomic,retain) UIColor *tintColor @property(nonatomic,copy) NSDictionary *titleTextAttributes - (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics - (void)setTitleVerticalPositionAdjustment:(CGFloat)adjustment forBarMetrics:(UIBarMetrics)barMetrics [iOS 6.0] @property(nonatomic,retain) UIImage *shadowImage [iOS 7.0] @property(nonatomic,retain) UIColor *barTintColor - (void)setBackgroundImage:(UIImage *)backgroundImage forBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics - (UIImage *)backgroundImageForBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics @property(nonatomic,retain) UIImage *backIndicatorImage @property(nonatomic,retain) UIImage *backIndicatorTransitionMaskImage
UIPageControl
[iOS 6.0] @property(nonatomic,retain) UIColor *pageIndicatorTintColor @property(nonatomic,retain) UIColor *currentPageIndicatorTintColor
UIProgressView
@property(nonatomic, retain) UIColor* progressTintColor @property(nonatomic, retain) UIColor* trackTintColor @property(nonatomic, retain) UIImage* progressImage @property(nonatomic, retain) UIImage* trackImage
UIRefreshControl
[iOS 6.0] @property (nonatomic, retain) UIColor *tintColor @property (nonatomic, retain) NSAttributedString *attributedTitle
UISearchBar
@property(nonatomic,retain) UIImage *backgroundImage @property(nonatomic,retain) UIImage *scopeBarBackgroundImage @property(nonatomic) UIOffset searchFieldBackgroundPositionAdjustment @property(nonatomic) UIOffset searchTextPositionAdjustment - (void)setSearchFieldBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state - (void)setImage:(UIImage *)iconImage forSearchBarIcon:(UISearchBarIcon)icon state:(UIControlState)state - (void)setScopeBarButtonBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state - (void)setScopeBarButtonDividerImage:(UIImage *)dividerImage forLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState - (void)setScopeBarButtonTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state - (void)setPositionAdjustment:(UIOffset)adjustment forSearchBarIcon:(UISearchBarIcon)icon [iOS 7.0] @property(nonatomic,retain) UIColor *barTintColor - (void)setBackgroundImage:(UIImage *)backgroundImage forBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics - (UIImage *)backgroundImageForBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics
UISegmentedControl
@property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR; - (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics - (void)setDividerImage:(UIImage *)dividerImage forLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState barMetrics:(UIBarMetrics)barMetrics - (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state - (void)setContentPositionAdjustment:(UIOffset)adjustment forSegmentType:(UISegmentedControlSegment)leftCenterRightOrAlone barMetrics:(UIBarMetrics)barMetrics
UISlider
@property(nonatomic,retain) UIColor *minimumTrackTintColor @property(nonatomic,retain) UIColor *maximumTrackTintColor @property(nonatomic,retain) UIColor *thumbTintColor
UIStepper
[iOS 6.0] @property(nonatomic,retain) UIColor *tintColor - (void)setBackgroundImage:(UIImage*)image forState:(UIControlState)state - (void)setDividerImage:(UIImage*)image forLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState - (void)setIncrementImage:(UIImage *)image forState:(UIControlState)state - (void)setDecrementImage:(UIImage *)image forState:(UIControlState)state
UISwitch
@property(nonatomic, retain) UIColor* onTintColor [iOS 6.0] @property(nonatomic, retain) UIColor *tintColor @property(nonatomic, retain) UIColor *thumbTintColor @property(nonatomic, retain) UIImage *onImage @property(nonatomic, retain) UIImage *offImage
UITabBar
@property(nonatomic,retain) UIColor *tintColor @property(nonatomic,retain) UIColor *selectedImageTintColor @property(nonatomic,retain) UIImage *backgroundImage @property(nonatomic,retain) UIImage *selectionIndicatorImage [iOS 6.0] @property(nonatomic,retain) UIImage *shadowImage [iOS 7.0] @property(nonatomic,retain) UIColor *barTintColor @property(nonatomic) UITabBarItemPositioning itemPositioning @property(nonatomic) CGFloat itemWidth @property(nonatomic) CGFloat itemSpacing @property(nonatomic) UIBarStyle barStyle
UITabBarItem
- (void)setTitlePositionAdjustment:(UIOffset)adjustment
UITableView
[iOS 6.0] @property(nonatomic, retain) UIColor *sectionIndexColor @property(nonatomic, retain) UIColor *sectionIndexTrackingBackgroundColor [iOS 7.0] @property (nonatomic) UIEdgeInsets separatorInset @property(nonatomic, retain) UIColor *sectionIndexBackgroundColor
UITableViewCell
[iOS 7.0] @property (nonatomic) UIEdgeInsets separatorInset
UITableViewHeaderFooterView
[iOS 6.0] @property(nonatomic, retain) UIColor *tintColor
UIToolbar
@property(nonatomic,retain) UIColor *tintColor; - (void)setBackgroundImage:(UIImage *)backgroundImage forToolbarPosition:(UIToolbarPosition)topOrBottom barMetrics:(UIBarMetrics)barMetrics [iOS 6.0] - (void)setShadowImage:(UIImage *)shadowImage forToolbarPosition:(UIToolbarPosition)topOrBottom [iOS 7.0] @property(nonatomic,retain) UIColor *barTintColor
(3 de julio de 2012) : esta lista no ha cambiado hasta la versión más reciente de XCode (4.3.3).
(12 de marzo de 2013) : Lista actualizada para SDK 6.1. Las propiedades que se aplican a iOS 6.0 (o superior) se enumeran debajo de la
[iOS 6.0]
etiqueta.(24 de octubre de 2013) : Lista actualizada para SDK 7.0. Las propiedades que se aplican a iOS 7.0 (o superior) se enumeran debajo de la
[iOS 7.0]
etiqueta.fuente
UIButton
no tenga ningunaUI_APPEARANCE_SELECTOR
propiedad, pero se ajuste alUIAppearance
protocolo. ¿Es esto un descuido de Apple?xcode-select --print-path
para obtener la ruta al directorio de desarrolladores.