Como crio uma categoria no Xcode 6 ou superior?


318

Quero criar uma categoria UIColorno meu aplicativo usando o Xcode 6. Mas o problema é que no Xcode 6 não há modelo de arquivo de categoria Objective-C.

Existe alguma opção para criar uma categoria no Xcode 6?


como você fez isso antes do Xcode 6?
holex

Basta digitá-lo em um arquivo de origem: @interface UIColor(MyCategory) ... etc
JeremyP

8
Por que não selecionar uma resposta? Não fazer isso perde tempo para outros usuários que procuram a solução.
precisa

Se você estiver usando o Swift, crie uma extensão em vez de uma categoria. Veja esta resposta para saber como fazê-lo.
21715 Suragch

Respostas:


745

Eles não esqueceram. Eles simplesmente mudaram sem contar a ninguém.

  1. Clique em File-> New->File

  2. Escolha Objective-C filesob Sourcesem iOSou Mac OS, respectivamente, e Clique em Avançar

  3. Agora sob File Type:escolher Category, ProtocolouExtension

PS. Sob o File Name:que você digitar aqui, será oCategory , Protocolou ExtensionName.


13
Isso é tão confuso.
Ben Sinclair

6
Eles apenas se acomodaram em adicionar Swift e ocultaram tudo no Objective-C, ou acho que sim. Pessoalmente, eu não entendo por que Swift foi adicionado, o Objective-C é uma linguagem tão bonita e expressiva quando você a conhece ... São Objetos em cima de C ... Perrrfect
unom

8
Heh, a descrição fornecida Objective-C Filepelo XCode 6 é "Um arquivo de Objective-C vazio". Em vez da minha descrição que seria "um dos arquivos de Objective-C antigos, não vazios, aos quais você está acostumado" , o que me excitou bastante bem!
Benjohn 17/09/14

@unmircea Obrigado por postar essas informações úteis. Para a Apple: Isso é estúpido!
mbm29414

1
Eles não esqueceram. Eles simplesmente mudaram sem contar a ninguém. o que é típico, considerando o nível de baixa qualidade das documentações da Apple em geral e mais frequentemente a total falta de documentação.
Duck

77

Para criar CategoryBaseClass + CategoryName.m / .h :

  1. Arquivo → Novo → Arquivo ... ou use ⌘N .
  2. Selecione Arquivo Objective-C .

insira a descrição da imagem aqui

  1. Digite o nome da categoria, selecione Tipo de Arquivo: Categoria e selecione a classe base.

insira a descrição da imagem aqui

  1. Conclua o fluxo para criar a categoria.


19

Atualização do Xcode6-Beta5

A interface agora mudou e é possível adicionar uma categoria diretamente na janela Novo> Arquivo.

Veja a resposta de unmircea .


Fiquei surpresa e acho que, por causa de Swift, eles esqueceram o bom e velho Objective-C.

Você tem duas opções:

  1. Crie uma classe Objective-C com o nome da categoria, por exemplo UIView+Powerups, e altere manualmente a interface para corresponder à da categoria. Observe que o snippet para a interface e a implementação da categoria ainda está funcionando, portanto é mais fácil: digite @interface-categorye @implementation-category.

  2. Importe-o do Xcode 5! Use 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/

    Feche e reabra o Xcode 6 e você encontrará "Objective-C Category" no assistente para o novo arquivo.


2
FYI: se você estiver em uma versão beta posterior, basta alterar Xcode-beta.app na linha para Xcode6-betaX.app, em que X é o número beta.
Alex o ucraniano

1
Errado! Confira a resposta de unmircea abaixo para a resposta correta - ela não desapareceu, acabou de ser movida .. #
Jay Jay

12

Não existe um modelo predefinido para criar categoria no Xcode 6 beta (por enquanto); eles podem adicionar essa opção mais tarde. Como uma Cocoa Touch Classsolução alternativa, você pode criar um (não é apropriado, eu sei, mas não há outra maneira) chamadoUIImage+Additions (ClassName + CategoryName) e substituir sua interface e implementação, algo como

UIImage + Additions.h

#import <UIKit/UIKit.h>

@interface UIImage(Additions)

+(void)testMethod;

@end 

UIImage + Adições.m

#import "UIImage+Additions.h"

@implementation UIImage (Additions)

+(void)testMethod
{

}

@end

Editar
Esta resposta foi escrita antes de encontrar uma maneira de criar categoria no Xcode 6 beta. Verifique a resposta da unmircea para a maneira correta de criar categorias


A Apple esqueceu de adicionar a categoria Objective-c, extensão de classe Objective-c, modelos de protocolos Objective-c ....
Yalamandarao

Criei um relatório de erro # 17627118 se você deseja duplicá-lo.
David Pettigrew

Não há necessidade de solução alternativa agora, já que a versão final do XCode 6 possui suporte a categorias embutido.
Zorayr

@Zorayr Foi respondida antes da versão final do Xcode 6 e a solução alternativa também não está errada. Não basta votar.
Anil Varghese

6

Estendendo a fantástica resposta da unmircea, re: como criar uma categoria personalizada para implementar uma UIColorpaleta personalizada , você pode criar uma categoria.

Depois de criar sua categoria (neste exemplo, é uma categoria chamada ColorPalettede classe UIColor ), você terá um cabeçalho e um arquivo de implementação.

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 sua paleta de cores personalizada, basta importar o cabeçalho para a classe em que você deseja implementar suas cores personalizadas:

#import "UIColor+ColorPalette.h"

e chamar a cor como se fosse uma cor padrão como redColor, greenColorou blueColor.

Aqui está um link para uma discussão um pouco mais aprofundada sobre a criação de uma paleta personalizada.

Além disso, aqui está uma ferramenta para ajudá-lo a selecionar os valores de cores personalizados


1
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Jasper

3

Você pode simplesmente copiar os modelos que deseja de uma versão mais antiga do Xcode, criei um script de shell para isso: https://github.com/cDigger/AddMissingTemplates


Embora essa possa ser uma solução funcional, provavelmente é uma idéia melhor usar o suporte a categorias incorporado ao Xcode - dessa forma, os modelos sempre estarão atualizados.
Zorayr

1

Você pode criar um arquivo de "extensão" como o 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 {


}

Feito. aproveite a codificação

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.