Как мне создать категорию в Xcode 6 или выше?


318

Я хочу создать категорию UIColorв своем приложении, используя Xcode 6. Но дело в том, что в Xcode 6 нет шаблона файла категории Objective-C.

Есть ли возможность создать категорию в Xcode 6?


как ты делал это до Xcode 6?
Holex

Просто введите его в исходный файл: и @interface UIColor(MyCategory) ... т.д.
JeremyP

8
Почему бы не выбрать ответ? В противном случае тратится время для других пользователей, которые ищут решение.
Томми С.

Если вы используете Swift, то вы бы создали расширение, а не категорию. Посмотрите этот ответ, чтобы узнать, как это сделать.
Сурагч

Ответы:


745

Они не забыли. Они просто перенесли это, никому не сказав.

  1. Нажмите File-> New->File

  2. Выберите Objective-C fileниже Sourcesв iOSили Mac OSсоответственно и нажмите Далее

  3. Теперь под File Type:выбрать либо Category, ProtocolилиExtension

PS. Под File Name:что вы вводите здесь будет либо Category, Protocolили Extensionимя.


13
Это так запутанно.
Бен Синклер

6
Они просто приспособились к добавлению Swift и скрыли все под Objective-C, или я думаю, что они сделали. Лично я не понимаю, почему был добавлен Swift, Objective-C - это такой красивый и выразительный язык, как только вы узнаете его ... Это объекты на вершине C ... Perrrfect
unom

8
Хех, описание, данное Objective-C FileXCode 6, это «Пустой файл Objective-C», а не мое описание, которое будет «одним из старых, совсем не пустых файлов Objective-C, к которому вы привыкли». что меня довольно приятно отбросило!
Бенджон

@unmircea Спасибо за размещение такой полезной информации. Для Apple: это глупо!
mbm29414

1
Они не забыли. Они просто перенесли это, никому не сказав. что типично, учитывая дерьмовый уровень документации Apple в целом и чаще всего полное отсутствие документации.
Утка

77

Чтобы создать CategoryBaseClass + CategoryName.m / .h :

  1. Файл → Новый → Файл ... или используйте ⌘N .
  2. Выберите файл Objective-C .

введите описание изображения здесь

  1. Введите имя категории, выберите Тип файла: Категория , а затем выберите базовый класс.

введите описание изображения здесь

  1. Завершите процесс создания категории.


19

Xcode6-Beta5 обновление

Интерфейс теперь изменился, и можно добавлять категорию прямо из окна «Создать»> «Файл».

Смотрите ответ unmircea .


Я сам был удивлен, и, думаю, из-за Свифта они забыли о старом добром Objective-C.

У вас есть два варианта:

  1. Создайте класс Objective C с именем категории, например UIView+Powerups, затем вручную измените интерфейс, чтобы соответствовать интерфейсу категории. Обратите внимание, что фрагмент интерфейса и реализации категории все еще работает, так что это очень просто: введите @interface-categoryи @implementation-category.

  2. Импортируйте его из Xcode 5! Используйте эту команду:

    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/

    Закройте и снова откройте Xcode 6, и вы найдете «категорию Objective-C» в мастере для нового файла.


2
К вашему сведению: если вы участвуете в более поздней бета-версии, просто измените Xcode-beta.app в строке на Xcode6-betaX.app, где X - номер беты.
Алексей Украинский

1
Неправильно! Проверьте ответ unmircea ниже для правильного ответа - он не ушел, он только что переехал ..
Jay

12

Нет предопределенного шаблона для создания категории в бета-версии Xcode 6 (пока), они могут добавить эту опцию позже. В качестве обходного Cocoa Touch Classпути вы можете создать имя UIImage+Additions(ClassName + CategoryName) (это не совсем правильно, я знаю, но никак иначе ) и переопределить его интерфейс и реализацию.

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

Редактировать
Этот ответ был написан до нахождения способа создания категории в бета-версии Xcode 6. Проверьте ответ unmircea на правильный способ создания категории


Apple забыла добавить категорию Objective-c, расширение класса Objective-c, шаблоны протоколов Objective-c ....
Yalamandarao

Я создал отчет об ошибке # 17627118, если вы хотите скопировать его.
Дэвид Петтигрю

Теперь нет необходимости в обходном пути, так как финальная версия XCode 6 имеет встроенную поддержку категорий.
Зорайр

@Zorayr Ответ был дан до финальной версии Xcode 6, и обходной путь также не является неправильным. Не просто проголосуйте.
Анил Варгезе

6

Расширяя фантастический ответ unmircea о том, как создать собственную категорию для реализации пользовательской UIColorпалитры, вы можете создать категорию.

После того как вы создали категорию (в данном примере это категория называется ColorPaletteиз класса UIColor ), вы будете иметь заголовок и файл реализации.

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

Чтобы использовать свою собственную цветовую палитру, просто импортируйте заголовок в класс, где вы хотите реализовать свои собственные цвета:

#import "UIColor+ColorPalette.h"

и называть цвет , как вы бы стандартный цвет , как redColor, greenColorили blueColor.

Вот ссылка на чуть более глубокое обсуждение создания пользовательской палитры.

Кроме того, вот инструмент, который поможет вам выбрать пользовательские значения цвета


1
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
Джаспер

3

Вы можете просто скопировать нужные шаблоны из более старой версии XCode, для этого я создал скрипт оболочки: https://github.com/cDigger/AddMissingTemplates


Хотя это может быть рабочим решением, вероятно, лучше использовать встроенную в Xcode поддержку категорий - таким образом, шаблоны всегда будут обновляться.
Зорайр

1

Вы можете создать «расширение» файла, например, 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 {


}

Готово. наслаждайся кодированием

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.