¿Cómo creo una categoría en Xcode 6 o superior?

318

Quiero crear una categoría UIColoren mi aplicación usando Xcode 6. Pero la cuestión es que en Xcode 6 no hay una plantilla de archivo de categoría Objective-C.

¿Hay alguna opción para crear una categoría en Xcode 6?

Yalamandarao
fuente
¿Cómo lo hiciste antes de Xcode 6?
holex
Sólo tienes que escribir a cabo en un archivo de origen: @interface UIColor(MyCategory) ... etc
JeremyP
8
¿Por qué no seleccionar una respuesta? Al no hacerlo, se pierde tiempo para otros usuarios que buscan la solución.
Tommie C.
Si está utilizando Swift, crearía una extensión en lugar de una categoría. Vea esta respuesta para saber cómo hacerlo.
Suragch

Respuestas:

745

No lo olvidaron. Simplemente lo movieron sin decirle a nadie.

  1. Haga clic en File-> New->File

  2. Seleccione Objective-C filebajo Sourcesen iOSo Mac OSrespectivamente y haga clic en Siguiente

  3. Ahora bajo File Type:elegir Category, ProtocoloExtension

PD. En virtud de File Name:lo que se ingrese aquí será o bien el Category, Protocolo ExtensionNombre.

unom
fuente
13
Esto es muy confuso.
Ben Sinclair
66
Simplemente se acomodaron a agregar Swift y ocultaron todo bajo Objective-C o creo que lo hicieron. Personalmente no entiendo por qué se agregó Swift, Objective-C es un lenguaje tan hermoso y expresivo una vez que lo conoces ... Son objetos en la parte superior de C ... Perrrfect
unom
8
Heh, la descripción dada Objective-C Filepor XCode 6 es "Un archivo Objective-C vacío", en lugar de mi descripción, que sería "uno de los archivos Objective-C antiguos, en absoluto vacíos". , lo que me arrojó bastante bien!
Benjohn
@unmircea Gracias por publicar información tan útil. Para Apple: ¡Esto es estúpido!
mbm29414
1
No lo olvidaron. Simplemente lo movieron sin decirle a nadie. lo que es típico, considerando el nivel deficiente de las documentaciones de Apple en general y, con mayor frecuencia, la falta total de documentación.
Pato
77

Para crear CategoryBaseClass + CategoryName.m / .h :

  1. Archivo → Nuevo → Archivo ... o use ⌘N .
  2. Seleccione Objective-C File .

ingrese la descripción de la imagen aquí

  1. Escriba el nombre de la categoría, seleccione Tipo de archivo: Categoría y luego seleccione la clase base.

ingrese la descripción de la imagen aquí

  1. Complete el flujo para crear la categoría.
Zorayr
fuente
37

Aquí hay una demostración visual:

crear un archivo de categoría

Rob Mayoff
fuente
19

Actualización de Xcode6-Beta5

La interfaz ahora ha cambiado y es posible agregar una categoría directamente desde la ventana Nuevo> Archivo.

Ver la respuesta de unmircea .


Me sorprendió a mí mismo, y supongo que debido a Swift se olvidaron del viejo Objective-C.

Tienes dos opciones:

  1. Cree una clase Objective-C con el nombre de la categoría, por ejemplo UIView+Powerups, luego cambie manualmente la interfaz para que coincida con la de la categoría. Tenga en cuenta que el fragmento de la interfaz de categoría y la implementación aún funciona, por lo que es muy fácil: escriba @interface-categoryy @implementation-category.

  2. ¡Importarlo desde Xcode 5! Usa este comando:

    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/

    Cierre y vuelva a abrir Xcode 6 y encontrará "Categoría Objective-C" en el asistente para el nuevo archivo.

mokagio
fuente
2
FYI: si está en una versión beta posterior, simplemente cambie Xcode-beta.app en la línea a Xcode6-betaX.app donde X es el número beta.
Alex el ucraniano
1
¡Incorrecto! Echa un vistazo a la respuesta de unmircea a continuación para obtener la respuesta correcta: no se ha ido, se acaba de mover ...
Jay
12

No hay una plantilla predefinida para crear una categoría en Xcode 6 beta (por el momento), pueden agregar esta opción más adelante. Como solución alternativa, puede crear un Cocoa Touch Class(no es apropiado, lo sé, pero no de otra manera) llamado UIImage+Additions(ClassName + CategoryName) y anular su interfaz e implementación, algo como

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

Editar
Esta respuesta se escribió antes de encontrar una forma de crear una categoría en la beta de Xcode 6. Verifique la respuesta de unmircea para la forma correcta de crear categoría

Anil Varghese
fuente
Apple olvidó agregar la categoría Objective-c, la extensión de clase Objective-c, las plantillas de protocolos Objective-c ...
Yalamandarao
Creé un informe de error # 17627118 si desea duplicarlo.
David Pettigrew
No hay necesidad de la solución ahora, ya que la versión final de XCode 6 tiene soporte de categoría incorporado.
Zorayr
@Zorayr Se respondió antes de la versión final de Xcode 6 y la solución no está mal también. No simplemente rechace el voto.
Anil Varghese el
6

Extendiendo la fantástica respuesta de unmircea re: cómo crear una categoría personalizada para implementar una UIColorpaleta personalizada , puede crear una categoría.

Una vez que haya creado su categoría (en este ejemplo, es una categoría llamada ColorPalettede clase UIColor ), tendrá un encabezado y un archivo de implementación.

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

Para usar su paleta de colores personalizada, solo importe el encabezado a la clase donde desea implementar sus colores personalizados:

#import "UIColor+ColorPalette.h"

y llamar el color como lo haría un color estándar como redColor, greenColoro blueColor.

Aquí hay un enlace a una discusión un poco más profunda sobre la creación de una paleta personalizada.

Además, aquí hay una herramienta para ayudarlo a seleccionar los valores de color personalizados

Adrian
fuente
1
Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Jasper
3

Puede copiar las plantillas que desee de una versión anterior de Xcode, hice un script de shell para esto: https://github.com/cDigger/AddMissingTemplates

NSFish
fuente
Aunque esta podría ser una solución de trabajo, probablemente sea una mejor idea usar el soporte de categoría integrado en Xcode; de ​​esta manera, las plantillas siempre estarán actualizadas.
Zorayr
1

Puede crear un archivo de "extensión" como 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 {


}

Hecho. disfruta codificando

Rohit Sisodia
fuente