1

UIScrollView をサブクラス化して、少しカスタマイズしました。ユーザーがUIScrollViewで特定のことを行ったことを他のいくつかのクラスに通知するデリゲートを作成しようとしています。私の UIScrollView クラスには、以下のコードがあります。私が直面している問題は、警告が表示されることです

プロパティ 'delegate' 'retain (or strong)' 属性が 'UIScrollView' から継承されたプロパティと一致しません

これは、クラスが UIScrollView から継承されているためですが、デリゲートは NSObject に準拠しているためです。独自のデリゲートを作成しようとしたのはこれが初めてです。これを修正するにはどうすればよいですか?

私のコード:

#import <UIKit/UIKit.h>

@protocol ChangeSpaceDelegate <NSObject>
- (void)changeSpace:(int)spaceId;

@end

@interface CustomUIScrollView : UIScrollView {
    id<ChangeSpaceDelegate> delegate;
}

@property (retain, nonatomic)id delegate;

@end
4

3 に答える 3

2

具体的に質問に答えるために、delegateから取得したプロパティのプロパティ属性を再定義していますUIScrollView。すべてのデリゲートと同様に、weak(または、iOS 5 より前のunsafe_unretained) である必要があります。

ただし、このようにしてはいけません。UIScrollViewには既にデリゲートがあり、新しいデリゲート メソッドを実装する独自のデリゲート オブジェクトをそこに配置することを期待している場合、 の内部動作UIScrollViewはうまくいきません。新しいプロトコルと新しいデリゲート プロパティを定義します。

@property (weak, nonatomic) id<ChangeSpaceDelegate> changeSpaceDelegate;
于 2012-10-11T01:20:13.573 に答える
1

delegateからサブクラス化しているため、カスタム scrollview クラスでオブジェクトを作成する必要はありませんUIScrollViewself.delegateカスタムスクロールビュークラスのように直接使用できます。

于 2012-10-11T02:32:10.323 に答える
1

@Steve Madsen が述べたように、サブクラスに独自のデリゲート プロパティを追加することがよくあります。LikeUITableViewには別個DataSourceの とDelegateプロパティがあり、同じオブジェクトが割り当てられています。長期的には、スーパークラスで既に実装されているものを繰り返すことを強制せず、サブクラスの実装をより管理しやすくすることで、これは確実に報われます。

于 2012-10-11T03:50:44.317 に答える