次のカスタム ビューを作成しました。
@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 でデリゲートとデータソースを割り当てることができます。
IB でデリゲートとデータソースを割り当てたい場合、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 はありませんが、dataSource を割り当てて IB に委譲できます。