ios – 我们可以将IBOutlets列入一个类别吗?

ios – 我们可以将IBOutlets列入一个类别吗?,第1张

概述由于ViewController的代码变得太大,我想知道如何将代码拆分成多个文件.这是我遇到的问题: // In the original .m file, there are bunch of outlets in the interface extension.@interface aViewController()@property (weak, nonatomic) IBOutlet 由于VIEwController的代码变得太大,我想知道如何将代码拆分成多个文件.这是我遇到的问题:

// In the original .m file,there are bunch of outlets in the interface extension.@interface aVIEwController()@property (weak,nonatomic) IBOutlet UIVIEw *contentVIEw1;@property (weak,nonatomic) IBOutlet UIVIEw *contentVIEw2;@property (weak,nonatomic) IBOutlet UIVIEw *contentVIEw3;@end

我想根据三种不同的观点将文件分成3个类别.

// In category aVIEwController+contentVIEw1.m file@interface aVIEwController()@property (weak,nonatomic) IBOutlet UIVIEw *contentVIEw1;@end

但是,如果我删除了原始的contentVIEw1插座,则它不起作用.


为什么我必须将contentVIEw1插件保留在原始.m文件中?

解决方法 Objective-C类别不允许您向类添加其他属性,仅允许方法.因此,您不能在类别中添加其他IBOutlet.类别表示类似于@interface aVIEwController(Mycategoryname)(注意括号内给出的名称).

但是,您可以在类扩展中添加其他属性.类扩展名用与原始类相同的名称表示,后跟().在你的代码示例中,引用@interface aVIEwController()的两行实际上都声明了一个类扩展(不是类别),而不管它们实际上在哪个头文件中.

此外,您可以跨多个不同的标头创建多个类扩展.诀窍是你需要正确导入这些.

在示例中,我们考虑一个名为VIEwController的类.我们想要创建VIEwController Private.h和VIEwController Private2.h,它们具有额外的privateVIEw出口,仍然可以在VIEwController.m中访问.

以下是我们如何做到这一点:

VIEwController.h

// nothing special here#import <UIKit/UIKit.h>@interface VIEwController : UIVIEwController// some public propertIEs go here@end

VIEwController Private.h

// Note that we import the public header file#import "VIEwController.h"@interface VIEwController()@property (nonatomic,weak) IBOutlet UIVIEw *privateVIEw;@end

VIEwController Private2.h

// Note again we import the public header file#import "VIEwController.h"@interface VIEwController()@property (nonatomic,weak) IBOutlet UIVIEw *privateVIEw2;@end

VIEwController.m

// Here's where the magic is// We import each of the class extensions in the implementation file#import "VIEwController.h"#import "VIEwController+Private.h"#import "VIEwController+Private2.h"@implementation VIEwController// We can also setup a basic test to make sure it's working.// Just also make sure your IBOutlets are actually hooked up in Interface Builder- (voID)vIEwDIDLoad{    [super vIEwDIDLoad];    self.privateVIEw.backgroundcolor = [UIcolor redcolor];    self.privateVIEw2.backgroundcolor = [UIcolor greencolor];}@end

这就是我们如何做到这一点.

为什么你的代码不起作用

最有可能的是,你可能混淆了#import语句.要解决这个问题,

1)确保每个类扩展文件导入原始类头(即VIEwController.h)

2)确保类实现(即VIEwController.m)文件导入每个类扩展标头.

3)确保类头(即VIEwController.h)文件不导入任何类扩展头.

作为参考,您还可以在Customizing Existing Classes上查看Apple文档.

总结

以上是内存溢出为你收集整理的ios – 我们可以将IBOutlets列入一个类别吗?全部内容,希望文章能够帮你解决ios – 我们可以将IBOutlets列入一个类别吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1018504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存