Wie erstelle ich eine Kategorie in Xcode 6 oder höher?


318

Ich möchte UIColormit Xcode 6 eine Kategorie in meiner App erstellen. In Xcode 6 gibt es jedoch keine Objective-C-Kategoriedateivorlage.

Gibt es eine Option zum Erstellen einer Kategorie in Xcode 6?


Wie hast du es vor Xcode 6 gemacht?
Holex

@interface UIColor(MyCategory) ...
Geben Sie

8
Warum nicht eine Antwort auswählen? Wenn Sie dies nicht tun, verschwenden Sie Zeit für andere Benutzer, die nach der Lösung suchen.
Tommie C.

Wenn Sie Swift verwenden, erstellen Sie eine Erweiterung anstelle einer Kategorie. In dieser Antwort erfahren Sie, wie es geht.
Suragch

Antworten:


745

Sie haben nicht vergessen. Sie haben es einfach bewegt, ohne es jemandem zu sagen.

  1. Klicken Sie auf File-> New->File

  2. Wählen Sie Objective-C fileunter Sourcesin iOSbzw. Mac OSaus und klicken Sie auf Weiter

  3. Jetzt unter File Type:wählen entweder Category, ProtocoloderExtension

PS. Unter File Name:was auch immer Sie hier wird geben Sie entweder das Category, Protocoloder ExtensionNamen.


13
Das ist so verwirrend.
Ben Sinclair

6
Sie haben sich nur darauf eingestellt, Swift hinzuzufügen und alles unter Objective-C versteckt, oder ich denke, dass sie es getan haben. Ich persönlich verstehe nicht, warum Swift hinzugefügt wurde. Objective-C ist eine so schöne und ausdrucksstarke Sprache, wenn man sie erst einmal kennengelernt hat ... Es sind Objekte über C ... Perrrfect
bis zum

8
Heh, die Objective-C Filevon XCode 6 angegebene Beschreibung lautet "Eine leere Objective-C-Datei" und nicht meine Beschreibung "eine der alten, überhaupt nicht leeren Objective-C-Dateien, an die Sie gewöhnt sind". , was mich ziemlich nett abwarf!
Benjohn

@unmircea Vielen Dank für die Veröffentlichung dieser nützlichen Informationen. Zu Apple: Das ist dumm!
mbm29414

1
Sie haben nicht vergessen. Sie haben es einfach bewegt, ohne es jemandem zu sagen. Was ist typisch, wenn man bedenkt, wie beschissen Apple-Dokumentationen im Allgemeinen sind und am häufigsten überhaupt keine Dokumentation vorhanden sind.
Ente

77

So erstellen Sie CategoryBaseClass + CategoryName.m / .h :

  1. Datei → Neu → Datei ... oder verwenden Sie ⌘N .
  2. Wählen Sie Objective-C-Datei .

Geben Sie hier die Bildbeschreibung ein

  1. Geben Sie den Kategorienamen ein, wählen Sie Dateityp: Kategorie und anschließend die Basisklasse.

Geben Sie hier die Bildbeschreibung ein

  1. Schließen Sie den Ablauf ab, um die Kategorie zu erstellen.


19

Xcode6-Beta5-Update

Die Benutzeroberfläche wurde geändert und es ist möglich, eine Kategorie direkt über das Fenster Neu> Datei hinzuzufügen.

Siehe die Antwort von unmircea .


Ich war selbst überrascht und ich denke, wegen Swift haben sie das gute alte Objective-C vergessen .

Sie haben zwei Möglichkeiten:

  1. Erstellen Sie beispielsweise eine Objective-C-Klasse mit dem Kategorienamen und UIView+Powerupsändern Sie die Schnittstelle manuell so, dass sie mit der der Kategorie übereinstimmt. Beachten Sie, dass das Snippet für die Kategorieschnittstelle und die Implementierung noch funktioniert. Das ist also besonders einfach: Geben Sie @interface-categoryund ein @implementation-category.

  2. Importieren Sie es aus Xcode 5! Verwenden Sie diesen Befehl:

    cp -r /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File\ Templates/Cocoa\ Touch/Objective-C\ category.xctemplate /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File\ Templates/Source/

    Schließen Sie Xcode 6 und öffnen Sie es erneut. Im Assistenten für die neue Datei finden Sie "Objective-C Category".


2
Zu Ihrer Information: Wenn Sie sich in einer späteren Beta befinden, ändern Sie einfach Xcode-beta.app in der Zeile in Xcode6-betaX.app, wobei X die Beta-Nummer ist.
Alex der Ukrainer

1
Falsch! Überprüfen Sie die Antwort von unmircea unten für die richtige Antwort - es ist nicht weg, es hat sich gerade bewegt ..
Jay

12

Es gibt keine vordefinierte Vorlage zum Erstellen einer Kategorie in Xcode 6 Beta (vorerst). Diese Option wird möglicherweise später hinzugefügt. Als Workaround können Sie einen Cocoa Touch ClassNamen UIImage+Additions(ClassName + CategoryName) erstellen (es ist nicht richtig, ich weiß, aber auf keine andere Weise ) und seine Schnittstelle und Implementierung überschreiben

UIImage + Additions.h

#import <UIKit/UIKit.h>

@interface UIImage(Additions)

+(void)testMethod;

@end 

UIImage + Additions.m

#import "UIImage+Additions.h"

@implementation UIImage (Additions)

+(void)testMethod
{

}

@end

Bearbeiten
Diese Antwort wurde geschrieben, bevor eine Möglichkeit zum Erstellen einer Kategorie in der Xcode 6-Beta gefunden wurde. Überprüfen Sie die Antwort von unmircea auf die richtige Art und Weise, eine Kategorie zu erstellen


Apple hat vergessen, Objective-c-Kategorie, Objective-c-Klassenerweiterung, Objective-c-Protokollvorlagen
hinzuzufügen

Ich habe einen Fehlerbericht # 17627118 erstellt, wenn Sie ihn duplizieren möchten.
David Pettigrew

Die Problemumgehung ist jetzt nicht mehr erforderlich, da in der endgültigen Version von XCode 6 eine Kategorieunterstützung integriert ist.
Zorayr

@Zorayr Es wurde vor der endgültigen Xcode 6-Version beantwortet und die Umgehung ist auch nicht falsch. Stimmen Sie nicht einfach ab.
Anil Varghese

6

Wenn Sie die fantastische Antwort von unmircea erweitern : Wie Sie eine benutzerdefinierte Kategorie erstellen, um eine benutzerdefinierte UIColorPalette zu implementieren , können Sie eine Kategorie erstellen.

Sobald Sie Ihre Kategorie erstellt haben (in diesem Beispiel ist es eine Kategorie namens ColorPaletteder Klasse UIColor ), erhalten Sie einen Header und eine Implementierungsdatei.

UIColor + ColorPalette.h

#import <UIKit/UIKit.h>

@interface UIColor (ColorPalette)

// Your custom colors

+ (UIColor *) customRedButtonColor;
+ (UIColor *) customGreenButtonColor;

@end

UIColor + ColorPalette.m

#import "UIColor+ColorPalette.h"

@implementation UIColor (ColorPalette)

// Button Colors

+ (UIColor *) customRedButtonColor {
    return [UIColor colorWithRed:178.0/255.0 green:25.0/255.0 blue:0.0/255.0 alpha:1.0];
}

+ (UIColor *) customGreenButtonColor {
    return [UIColor colorWithRed:20.0/255.0 green:158.0/255.0 blue:96.0/255.0 alpha:1.0];
}

Um Ihre benutzerdefinierte Farbpalette zu verwenden, importieren Sie einfach die Kopfzeile in die Klasse, in der Sie Ihre benutzerdefinierten Farben implementieren möchten:

#import "UIColor+ColorPalette.h"

und rufen Sie die Farbe auf wie ein Standardfarbe wie redColor, greenColoroder blueColor.

Hier ist ein Link zu einer etwas ausführlicheren Diskussion über das Erstellen einer benutzerdefinierten Palette.

Darüber hinaus finden Sie hier ein Tool, mit dem Sie die benutzerdefinierten Farbwerte auswählen können


1
Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Jasper

3

Sie können einfach die gewünschten Vorlagen aus einer älteren Version von Xcode kopieren. Dazu habe ich ein Shell-Skript erstellt: https://github.com/cDigger/AddMissingTemplates


Obwohl dies eine funktionierende Lösung sein könnte, ist es wahrscheinlich eine bessere Idee, die in Xcode integrierte Kategorieunterstützung zu verwenden. Auf diese Weise sind die Vorlagen immer auf dem neuesten Stand.
Zorayr

1

Sie können eine "Erweiterungs" -Datei wie NSString + Helper erstellen:

1: File  New  File... or use N.

2: Name NSString+Helper (For example)

3: create the file

4: Remove the code from file

5: add 

extension NSString {


}

Erledigt. Viel Spaß beim Codieren

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.