Buscar..


Sintaxis

  • @interface ClassName (categoryName) // ClassName es la clase que se extenderá

  • // Declaraciones de método y propiedad

  • @fin

Observaciones

Para evitar choques de nombres de métodos, se recomienda usar prefijos (como xyz_ en el ejemplo). Si existen métodos con el mismo nombre, no está definido cuál se usará en el tiempo de ejecución.

Categoría simple

Interfaz e implementación de una categoría simple en NSArray, llamada Filter, con un solo método que filtra los números.

Es una buena práctica agregar un prefijo ( PF ) al método para garantizar que no sobrescribamos ningún método futuro de NSArray .

@interface NSArray (PFFilter)

- (NSArray *)pf_filterSmaller:(double)number;

@end

@implementation NSArray (PFFilter)

- (NSArray *)pf_filterSmaller:(double)number
{
    NSMutableArray *result = [NSMutableArray array];
    for (id val in self)
    {
        if ([val isKindOfClass:[NSNumber class] && [val doubleValue] >= number)
        {
            [result addObject:val];
        }
    }
    return [result copy];
}

@end

Declarar un método de clase

Archivo de encabezado UIColor+XYZPalette.h :

@interface UIColor (XYZPalette)

+(UIColor *)xyz_indigoColor;

@end

y la implementación de UIColor+XYZPalette.m :

@implementation UIColor (XYZPalette)

+(UIColor *)xyz_indigoColor
{
    return [UIColor colorWithRed:75/255.0f green:0/255.0f blue:130/255.0f alpha:1.0f];
}

@end

Añadiendo una propiedad con una categoría

Las propiedades se pueden agregar con categorías usando objetos asociados, una característica del tiempo de ejecución de Objective-C.

Tenga en cuenta que la declaración de propiedad de retain, nonatomic coincide con el último argumento con objc_setAssociatedObject . Consulte Adjuntar objeto a otro objeto existente para obtener explicaciones.

#import <objc/runtime.h>

@interface UIViewController (ScreenName)

@property (retain, nonatomic) NSString *screenName;

@end

@implementation UIViewController (ScreenName)

@dynamic screenName;

- (NSString *)screenName {
    return objc_getAssociatedObject(self, @selector(screenName));
}

- (void)setScreenName:(NSString *)screenName {
    objc_setAssociatedObject(self, @selector(screenName), screenName, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

@end

De conformidad con el protocolo.

Puede agregar protocolos a las clases estándar para ampliar su funcionalidad:

@protocol EncodableToString <NSObject>
- (NSString *)toString;
@end

@interface NSDictionary (XYZExtended) <EncodableToString>
@end

@implementation NSDictionary (XYZExtended)
- (NSString *)toString {
    return self.description;
}
@end

donde XYZ prefijo tu proyecto

Crear una categoría en XCode

Las categorías proporcionan la capacidad de agregar alguna funcionalidad adicional a un objeto sin subclasificar o cambiar el objeto real.

Por ejemplo, queremos establecer algunas fuentes personalizadas. Vamos a crear una categoría que agregue funcionalidad a la clase UIFont . Abra su proyecto XCode, haga clic en File -> New -> File y elija File Objective-C file , haga clic en Siguiente, ingrese el nombre de su categoría, diga "CustomFont" elija el tipo de archivo como Categoría y Clase como UIFont, luego haga clic en "Siguiente" seguido de "Crear". "

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

Declare el método de la categoría: -

Haga clic en "UIFont + CustomFonts.h" para ver el archivo de encabezado de la nueva categoría. Agregue el siguiente código a la interfaz para declarar el método.

@interface UIFont (CustomFonts)

+(UIFont *)productSansRegularFontWithSize:(CGFloat)size;

@end

Ahora implemente el método de la categoría: -

Haga clic en "UIFont + CustomFonts.m" para ver el archivo de implementación de la categoría. Agregue el siguiente código para crear un método que establezca la fuente ProductSansRegular.

+(UIFont *)productSansRegularFontWithSize:(CGFloat)size{
    
    return [UIFont fontWithName:@"ProductSans-Regular" size:size];
    
}

Importa tu categoría

#import "UIFont+CustomFonts.h"

Ahora establece la fuente de la etiqueta

[self.label setFont:[UIFont productSansRegularFontWithSize:16.0]];


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow