Suche…


Syntax

  • @Interface ClassName (categoryName) // ClassName ist die Klasse, die erweitert werden soll

  • // Methoden- und Eigenschaftsdeklarationen

  • @Ende

Bemerkungen

Um Methodenkonflikte zu vermeiden, wird empfohlen, Präfixe zu verwenden (z. B. xyz_ im Beispiel). Wenn Methoden mit dem gleichen Namen existieren, ist nicht definiert, welche Methode zur Laufzeit verwendet wird.

Einfache Kategorie

Schnittstelle und Implementierung einer einfachen Kategorie in NSArray, genannt Filter, mit einer einzigen Methode, die Zahlen filtert.

Es NSArray , der Methode ein Präfix ( PF ) hinzuzufügen, um sicherzustellen, dass keine zukünftigen NSArray Methoden überschrieben werden.

@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

Klassenmethode deklarieren

Header-Datei UIColor+XYZPalette.h :

@interface UIColor (XYZPalette)

+(UIColor *)xyz_indigoColor;

@end

und Implementierung 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

Eine Eigenschaft mit einer Kategorie hinzufügen

Eigenschaften können mithilfe von verknüpften Objekten, einer Funktion der Objective-C-Laufzeit, mit Kategorien hinzugefügt werden.

Beachten Sie, dass die Eigenschaftsdeklaration von retain, nonatomic dem letzten Argument zu objc_setAssociatedObject . Erläuterungen dazu finden Sie unter Objekt an anderes vorhandenes Objekt anhängen.

#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

Protokollkonform

Sie können Standardklassen Protokolle hinzufügen, um deren Funktionalität zu erweitern:

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

@interface NSDictionary (XYZExtended) <EncodableToString>
@end

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

wo XYZ das Präfix Ihres Projekts

Erstellen Sie eine Kategorie in XCode

Kategorien bieten die Möglichkeit, einem Objekt zusätzliche Funktionen hinzuzufügen, ohne das eigentliche Objekt zu subklassifizieren oder zu ändern.

Zum Beispiel möchten wir einige benutzerdefinierte Schriftarten festlegen. Lassen Sie uns eine Kategorie erstellen, die der UIFont Klasse Funktionen UIFont . Öffnen Sie Ihr XCode-Projekt, klicken Sie auf File -> New -> File und wählen Sie Objective-C file . Klicken Sie auf Weiter. Geben Sie Ihren Kategorienamen ein, sagen Sie "CustomFont". "

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Deklarieren Sie die Kategoriemethode: -

Klicken Sie auf "UIFont + CustomFonts.h", um die Header-Datei der neuen Kategorie anzuzeigen. Fügen Sie der Schnittstelle den folgenden Code hinzu, um die Methode zu deklarieren.

@interface UIFont (CustomFonts)

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

@end

Implementieren Sie jetzt die Kategoriemethode: -

Klicken Sie auf "UIFont + CustomFonts.m", um die Implementierungsdatei der Kategorie anzuzeigen. Fügen Sie den folgenden Code hinzu, um eine Methode zu erstellen, mit der ProductSansRegular Font festgelegt wird.

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

Importieren Sie Ihre Kategorie

#import "UIFont+CustomFonts.h"

Legen Sie nun die Beschriftungsschriftart fest

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow