一覧更新前後のタイミングが分かるUICollectionViewを実装する

| コメント(0) | トラックバック(0)
一覧を更新したタイミングで直前の選択状態に戻したいなど、UICollectionView更新前後のタイミングを知りたい事が多々あるかと思います。
しかし残念な事にこのタイミングのコールバックメソッドは用意されていません。
今回はUICollectionView更新前後でコールバックされるメソッドを自前で追加する方法をご紹介します。

まずコールバックメソッドを追加する為にUITableViewを継承したクラス「UICollectionViewEx」を作成します。
また、UICollectionViewEx用のプロトコルを宣言します。

@class UICollectionViewEx;


@protocol UICollectionViewExDelegate <NSObject, UICollectionViewDelegate>


@optional

- (void)willReloadDataByCollectionView:(UICollectionViewEx*)collectionView;

- (void)didReloadDataByCollectionView:(UICollectionViewEx*)collectionView;


@end


// 拡張機能を持たせたUICollectionView

@interface UICollectionViewEx : UICollectionView


@property (nonatomic, assign) id<UICollectionViewExDelegate> delegate;


@end



UICollectionViewExを使用する際、UICollectionViewのdelegate設定のみで使用できるようにするため、UICollectionViewExDelegateはUIControllViewDelegateを継承します。

実装は以下の通りです。

@implementation UICollectionViewEx


@dynamic delegate;


- (id)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

        // Initialization code

    }

    return self;

}


- (void)reloadData

{

if ([self.delegate respondsToSelector:@selector(willReloadDataByCollectionView:)]) {

[self.delegate willReloadDataByCollectionView:self];

}

[super reloadData];

if ([self.delegate respondsToSelector:@selector(didReloadDataByCollectionView:)]) {

[self.delegate didReloadDataByCollectionView:self];

}

}


@end


reloadDataメソッドをオーバーライドし、更新前後のタイミングでコールバックする処理を追加しています。
delegateを@dynamic宣言のみ行なう事により、スーパークラスのdelegateを流用します。

UICollectionViewExの使い方はUICollectionViewと何も変わりません。
必用な時に、追加したコールバックメソッドを実装します。

同じ要領で更新前後にコールバックされるUITableViewも作る事が出来ますので、お試し下さい。

トラックバック(0)

トラックバックURL: http://www.ict-fractal.com/MovableType/mt/mt-tb.cgi/71

コメントする

Twitterボタン
Twitterブログパーツ