ios – 为什么我必须在Apple sdk中没有任何IBOutlets时将IBOutlet标识符添加到我的委托?

ios – 为什么我必须在Apple sdk中没有任何IBOutlets时将IBOutlet标识符添加到我的委托?,第1张

概述我创建了以下自定义视图: @interface TNGalleryView : UIView@property (assign, nonatomic) id <TNGalleryViewDelegate> delegate;@property (assign, nonatomic) id <TNGalleryViewDataSource> dataSource;@end 我可以在代码中分 我创建了以下自定义视图:
@interface TNgalleryVIEw : UIVIEw@property (assign,nonatomic) ID <TNgalleryVIEwDelegate> delegate;@property (assign,nonatomic) ID <TNgalleryVIEwDataSource> dataSource;@end

我可以在代码中分配它的委托,但是当我想在IB中分配委托时,我不能.我必须将我的代码更改为:

@interface TNgalleryVIEw : UIVIEw@property (assign,nonatomic) IBOutlet ID <TNgalleryVIEwDelegate> delegate;@property (assign,nonatomic) IBOutlet ID <TNgalleryVIEwDataSource> dataSource;@end

然后我可以在IB中分配delegate和dataSource.

为什么我想在IB中分配delegate和dataSource我必须添加IBOutlet标识符,但在apple sdk里面没有任何IBOutlets?例如,UICollectionVIEw声明的这一部分:

NS_CLASS_AVAILABLE_IOS(6_0) @interface UICollectionVIEw : UIScrollVIEw- (ID)initWithFrame:(CGRect)frame collectionVIEwLayout:(UICollectionVIEwLayout *)layout; // the designated initializer@property (nonatomic,retain) UICollectionVIEwLayout *collectionVIEwLayout;@property (nonatomic,assign) ID <UICollectionVIEwDelegate> delegate;@property (nonatomic,assign) ID <UICollectionVIEwDataSource> dataSource;

没有任何IBOutlet,但我可以在IB中分配dataSource并委托给它.

解决方法 相当不错的问题!

用文本编辑器打开你的storyboard / xib,搜索“TNgalleryVIEw”,你会发现这样的xml标签:

<vIEw contentMode="scaletoFill" fixedFrame="YES" translatesautoresizingMaskIntoConstraints="NO" ID="ke7-rk-01e" customClass="TNgalleryVIEw">    <rect key="frame" x="86" y="309" wIDth="160" height="252"/>    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>    <color key="backgroundcolor" white="1" Alpha="1" colorSpace="custom" customcolorSpace="calibrateDWhite"/></vIEw>

请注意:TNgalleryVIEw包含在带有属性的“vIEw”标记中:customClass =“TNgalleryVIEw”

现在在storyboard / xib中添加一个UICollectionVIEw,使用文本编辑器保存并重新编写storyboard / xib,搜索“collectionVIEw”,你会发现这样的xml标签:

<collectionVIEw opaque="NO" clipsSubvIEws="YES" multipletouchEnabled="YES" contentMode="scaletoFill" fixedFrame="YES" minimumZoomScale="0.0" maximumZoomScale="0.0" dataMode="prototypes" translatesautoresizingMaskIntoConstraints="NO" ID="ouM-xa-T6a">   <rect key="frame" x="93" y="72" wIDth="160" height="252"/>   <autoresizingMask key="autoresizingMask" wIDthSizable="YES" heightSizable="YES"/>   <collectionVIEwFlowLayout key="collectionVIEwLayout" minimumlinespacing="10" minimumInteritemSpacing="10" ID="Cv0-O7-zGY">   <size key="itemSize" wIDth="50" height="50"/>   <size key="headerReferenceSize" wIDth="0.0" height="0.0"/>   <size key="footerReferenceSize" wIDth="0.0" height="0.0"/>   <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>    </collectionVIEwFlowLayout></collectionVIEw>

现在,您将发现不同的,collectionVIEw包含在“collectionVIEw”标记中

我想这就是为什么你不能在IB中分配自定义委托而不将自定义委托设置为IBOutlet的原因.

UPDATE

评论其他人的回答没有声誉.所以我在这里说些什么:清楚地阅读问题,并在xcode中进行测试,你会发现Sergey Demchenko的问题是:

首先,如果以这种方式声明TNgalleryVIEwDelegate:

@property (assign,nonatomic) ID <TNgalleryVIEwDelegate> delegate;

xcode屏幕截图:

现在,nonatomic) IBOutlet ID <TNgalleryVIEwDelegate> delegate;

xcode屏幕截图:

总结

以上是内存溢出为你收集整理的ios – 为什么我必须在Apple sdk中没有任何IBOutlets时将IBOutlet标识符添加到我的委托?全部内容,希望文章能够帮你解决ios – 为什么我必须在Apple sdk中没有任何IBOutlets时将IBOutlet标识符添加到我的委托?所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存