Jak utworzyć kategorię w Xcode 6 lub wyższej?

318

Chcę utworzyć kategorię UIColorw mojej aplikacji za pomocą Xcode 6. Ale chodzi o to, że w Xcode 6 nie ma szablonu pliku kategorii Objective-C.

Czy jest jakaś opcja utworzenia kategorii w Xcode 6?

Yalamandarao
źródło
jak to zrobiłeś przed Xcode 6?
holex,
Wystarczy wpisać go w pliku źródłowym: @interface UIColor(MyCategory) ... etc
JeremyP
8
Dlaczego nie wybrać odpowiedzi? W przeciwnym razie marnuje się czas dla innych użytkowników szukających rozwiązania.
Tommie C.
Jeśli używasz Swift, wówczas utworzyłbyś rozszerzenie, a nie kategorię. Zobacz tę odpowiedź za, jak to zrobić.
Suragch

Odpowiedzi:

745

Nie zapomnieli. Po prostu przenieśli go, nie mówiąc o tym nikomu.

  1. Kliknij File-> New->File

  2. Wybierz Objective-C fileponiżej Sourcesw iOSlub Mac OSodpowiednio i kliknij przycisk Dalej

  3. Teraz pod File Type:wybrać jedną Category, ProtocollubExtension

PS. Pod File Name:cokolwiek wpiszesz tutaj będzie albo Category, Protocollub ExtensionNazwa.

unom
źródło
13
To takie mylące.
Ben Sinclair,
6
Po prostu przystosowali się do dodawania Swift i ukryli wszystko pod Objective-C, lub myślę, że tak. Ja osobiście nie rozumiem, dlaczego dodano Swift, Objective-C jest tak pięknym i ekspresyjnym językiem, kiedy go poznasz ... To Objects na szczycie C ... Perrrfect
nie
8
Heh, opis podany Objective-C Fileprzez XCode 6 to „Pusty plik Objective-C”. Zamiast mojego opisu, który byłby „jednym ze starych, wcale nie pustych plików Objective-C, do którego jesteś przyzwyczajony” , co całkiem mnie odrzuciło!
Benjohn,
@unmircea Dziękujemy za opublikowanie tak przydatnych informacji. Do Apple: To głupie!
mbm29414,
1
Nie zapomnieli. Po prostu przenieśli go, nie mówiąc o tym nikomu. co jest typowe, biorąc pod uwagę gówniany poziom dokumentacji Apple w ogóle, a najczęściej całkowity brak dokumentacji.
Kaczka
77

Aby utworzyć CategoryBaseClass + CategoryName.m / .h :

  1. Plik → Nowy → Plik ... lub użyj ⌘N .
  2. Wybierz plik celu-C .

wprowadź opis zdjęcia tutaj

  1. Wpisz nazwę kategorii, wybierz Typ pliku: Kategoria , a następnie wybierz klasę podstawową.

wprowadź opis zdjęcia tutaj

  1. Zakończ przepływ, aby utworzyć kategorię.
Zorayr
źródło
37

Oto wizualna demonstracja:

tworzenie pliku kategorii

Rob Mayoff
źródło
19

Aktualizacja Xcode6-Beta5

Interfejs się zmienił i możliwe jest dodanie kategorii bezpośrednio z okna Nowy> Plik.

Zobacz odpowiedź Unmircei .


Sam byłem zaskoczony i chyba dzięki Szybkiemu zapomnieli o starym, dobrym Celu-C.

Masz dwie opcje:

  1. Utwórz klasę Objective-C z nazwą kategorii, na przykład UIView+Powerups, a następnie ręcznie zmień interfejs, aby pasował do kategorii. Pamiętaj, że fragment interfejsu kategorii i implementacji nadal działa, więc jest to wyjątkowo łatwe: wpisz @interface-categoryi @implementation-category.

  2. Zaimportuj go z Xcode 5! Użyj tego polecenia:

    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/

    Zamknij i ponownie otwórz Xcode 6, a w kreatorze nowego pliku znajdziesz „Kategoria celu C”.

mokagio
źródło
2
Do Twojej wiadomości: jeśli korzystasz z późniejszej wersji beta, po prostu zmień Xcode-beta.app w wierszu na Xcode6-betaX.app, gdzie X to numer wersji beta.
Alex the
1
Źle! Sprawdź poprawną odpowiedź Unmircea poniżej - nie zniknęła, właśnie się poruszyła.
Jay
12

W Xcode 6 beta nie ma wstępnie zdefiniowanego szablonu do tworzenia kategorii (na razie), mogą dodać tę opcję później. Aby obejść ten problem , możesz utworzyć Cocoa Touch Class(jego nie wiem, ale nie ma innego sposobu) o nazwie UIImage+Additions(ClassName + CategoryName) i zastąpić jego interfejs i implementację.

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

Edytuj
Ta odpowiedź została napisana przed znalezieniem sposobu na utworzenie kategorii w Xcode 6 beta. Sprawdź odpowiedź Unmircei na właściwy sposób tworzenia kategorii

Anil Varghese
źródło
Apple zapomniało dodać kategorię Objective-c, rozszerzenie klasy Objective-c, szablony protokołów Objective-c ....
Yalamandarao
Utworzyłem raport o błędzie # 17627118, jeśli chcesz go zduplikować.
David Pettigrew
Teraz nie ma potrzeby tego obejścia, ponieważ ostateczna wersja XCode 6 ma wbudowaną obsługę kategorii.
Zorayr
@Zorayr Odpowiedź została udzielona przed ostateczną wersją Xcode 6, a obejście również nie jest złe. Nie po prostu głosuj w dół.
Anil Varghese
6

Rozszerzając fantastyczną odpowiedź Unmircei na temat: jak utworzyć niestandardową kategorię w celu zaimplementowania niestandardowej UIColorpalety, możesz utworzyć kategorię.

Po utworzeniu swoją kategorię (w tym przykładzie jest to kategoria o nazwie ColorPalettez klasą UIColor ), będziesz mieć nagłówek i plik realizacji.

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];
}

Aby użyć niestandardowej palety kolorów, wystarczy zaimportować nagłówek do klasy, w której chcesz zaimplementować niestandardowe kolory:

#import "UIColor+ColorPalette.h"

i wywołać kolor tak jak standardowy kolor podobny redColor, greenColoralbo blueColor.

Oto link do nieco bardziej dogłębnej dyskusji na temat tworzenia niestandardowej palety.

Dodatkowo, oto narzędzie, które pomoże Ci wybrać niestandardowe wartości kolorów

Adrian
źródło
1
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Jasper
3

Możesz po prostu skopiować szablony, które chcesz ze starszej wersji Xcode, stworzyłem do tego skrypt powłoki: https://github.com/cDigger/AddMissingTemplates

NSFish
źródło
Chociaż może to być działające rozwiązanie, prawdopodobnie lepszym pomysłem jest użycie obsługi kategorii wbudowanej w Xcode - w ten sposób szablony będą zawsze aktualne.
Zorayr
1

Możesz utworzyć plik „rozszerzenia”, taki jak NSString + Helper:

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 {


}

Gotowy. miłego kodowania

Rohit Sisodia
źródło