如何在Xcode 6或更高版本中创建一个分类?

320
我想在我的应用程序中使用Xcode 6创建一个关于UIColor的分类。但是问题在于,在Xcode 6中没有Objective-C分类文件模板。
是否有任何选项可以在Xcode 6中创建一个分类?

你在 Xcode 6 之前是如何做到的? - holex
只需在源文件中键入以下内容:@interface UIColor(MyCategory) ... 等。 - JeremyP
8
为什么不选择一个答案呢?不这样做会浪费其他寻找解决方案的用户的时间。 - Tommie C.
如果您正在使用Swift,则应创建扩展而不是类别。请参见此答案了解如何操作。 - Suragch
8个回答

746

他们没有忘记,只是在没有告知任何人的情况下将其移动了。

  1. 点击 File -> New -> File

  2. iOSMac OS 下选择 Sources 中的 Objective-C file 并单击 Next

  3. 现在在 File Type: 下选择 CategoryProtocolExtension

PS. 在 File Name: 下,您输入的任何内容都将成为 CategoryProtocolExtension 的名称。


15
这真的很令人困惑。 - pronebird
6
他们只是适应了添加Swift,并将所有内容隐藏在Objective-C下面,或者我认为他们是这样做的。就我个人而言,我不明白为什么要添加Swift,一旦你掌握了它,Objective-C就是如此美丽和富有表现力的语言...它是建立在C语言之上的对象...完美无缺。 - unom
8
嘿,XCode 6 给出的“Objective-C 文件”的描述是“一个空的 Objective-C 文件”,而不是我的描述,我的描述会是“你习惯的旧的、一点也不空的 Objective-C 文件之一”,这让我相当困惑!请帮我将其翻译成中文。 - Benjohn
1
他们没有忘记,只是没有告诉任何人就把它移动了。这很典型,考虑到苹果文档通常质量较差,最常见的是完全缺乏文档。 - Duck
你在文档层面上缺少什么?虽然它们总是更改事物,但文档非常好,尽管写作风格与其他软件公司有些不同。 - unom
显示剩余5条评论

78
为创建 CategoryBaseClass+CategoryName.m/.h 文件:
  1. 选择 File → New → File... 或使用 ⌘N 快捷键。
  2. 选择 Objective-C File

图片描述

  1. 输入类别名称,选择 File Type: Category,然后选择基类。

图片描述

  1. 完成流程以创建该类别文件。

37

以下是一个图形演示:

创建分类文件


19

Xcode6-Beta5更新

界面已经更改,现在可以直接从新建文件窗口添加分类。

参见unmircea的答案


我自己也感到惊讶,我猜是因为Swift,他们忘记了好老的Objective-C。

你有两个选择:

  1. 创建一个带有分类名称的Objective-C类,例如UIView+Powerups,然后手动更改接口以匹配该类别的接口。请注意,类别接口和实现的代码片段仍然可用,所以这很容易:键入@interface-category@implementation-category

  2. 从Xcode 5中导入它!使用此命令:

    sudo cp -R /Applications/Xcode5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File\ Templates/Cocoa\ Touch/Objective-C\ category.xctemplate /Applications/Xcode6-Beta5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File\ Templates/Cocoa\ Touch/
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 代表测试版号码。 - Alex the Ukrainian
1
错误!请查看下面 unmircea 的答案,这才是正确的答案——它并没有消失,只是移动了位置。 - Jay

12

目前在Xcode 6 beta中还没有预定义的创建类别的模板,他们可能稍后会添加此选项。作为一种解决方法,您可以创建一个名为UIImage+AdditionsCocoa Touch Class(我知道这不是合适的方式,但没有其他方式),并覆盖其界面和实现,例如:

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 beta中创建类别的正确方式之前,编写了此答案。请查看unmircea的答案获取正确的创建类别方式。


苹果忘记添加Objective-c类别、Objective-c类扩展、Objective-c协议模板... - Yalamandarao
我创建了一个名为 #17627118 的错误报告,如果你想要复制它。 - David Pettigrew
现在不需要绕过了,因为XCode 6的最终版本已经内置了类别支持。 - Zorayr
@Zorayr 在最终的Xcode 6版本发布之前就已经有答案了,而且这个解决方法也不是错误的。请不要轻易地给负评。 - Anil Varghese

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"

您可以像调用标准颜色(例如redColorgreenColorblueColor)一样调用该颜色。

这里是一个稍微深入讨论自定义调色板的链接

此外,这是一个帮助您选择自定义颜色值的工具


1
虽然这理论上回答了问题,但最好在这里包括答案的关键部分,并提供参考链接。 - Jasper

3

虽然这可能是一种可行的解决方案,但最好使用集成在Xcode中的分类支持 - 这样,模板始终会保持最新。 - Zorayr

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 {


}

完成。享受编程吧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接