2017-09-04 4 views
0

を事前に選択されていない私は、負荷に最初のコレクションビューのセルを事前選択しようとしていますが、アイテムが負荷に事前に選択されていない私はコレクションビューのセルを事前選択するために使用さまずアイテムが

コードが

MenuBar.m // Type UIView <UICollectionViewDelegate ,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout> 

-(instancetype)initWithFrame:(CGRect)frame 
{ 
self = [super initWithFrame:frame]; 
if (self) { 

... 

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init]; 

UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; 

.... 
    // below code in -(instancetype)initWithFrame:(CGRect)frame 

NSIndexPath *selectedIndexPath = [NSIndexPath indexPathForItem:0 inSection:0]; 

    [collectionView selectItemAtIndexPath:selectedIndexPath 
           animated:false 
          scrollPosition:UICollectionViewScrollPositionNone]; 




.... 
// below code in -(instancetype)initWithFrame:(CGRect)frame 
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 

} 
+0

なぜcollectionView:didSelectItemAtIndexPathを呼び出すのですか?あなたのクラスの中でこのメソッドを実装しましたか? –

答えて

0
下方に設けられています

collectionView:didSelectItemAtIndexPath

あなたのクラス内で事前選択は、カスタムビューに事前に選択するための方法を提供する UIViewController によって制御されなければならないロジックのパーで、このメソッドを実装し: .hファイル:

- (void)preselectCellAt:(NSIndexPath *)indexPath; 

あなた.mファイル:

- (void)preselectCellAt:(NSIndexPath *)indexPath { 
     [collectionView selectItemAtIndexPath:indexPath 
            animated:false 
        scrollPosition:UICollectionViewScrollPositionNone]; 
     [self collectionView:collectionView didSelectItemAtIndexPath:indexPath]; 
    } 

このUIViewが初期化されているあなたのスーパーViewController

- (Void)viewDidiAppear { 
    [super viewDidiAppear]; 
    NSIndexPath *selectedIndexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
    [self.customView preselectCellAt:selectedIndexPath]; 
} 
+0

ありがとうございます。 UICollectionViewが定義したクラスのタイプはUIViewです。私は上記のコードを追加するとエラーが発生します。エラー ''表示されない 'UIView'のセレクタ 'viewDidAppear:' 'が表示されます。 – ios

+0

willMoveToSuperviewでメソッドを置換しました –

+0

まだ同じエラー – ios

0

あなたのUICollectionViewCellselectedBackgroundViewを設定する必要があります。

あなたが選択したとき、あなたのUICollectionViewCellが緑色になりたい場合たとえば、あなたはUICollectionViewCellクラス

Objcective C

- (void)awakeFromNib() { 
    [super awakeFromNib]; 

    UIView *selectedView = [[UIView alloc] initWithFrame: [self bounds]]; 
    [selectedView setBackgroundColor: [UIColor greenColor]]; 

    [self setSelectedBackgroundView: selectedView]; 
} 

スウィフト

override func awakeFromNib() { 
    super.awakeFromNib() 

    let selectedView = UIView(frame: self.bounds) 
    selectedView.backgroundColor = .green 

    self.selectedBackgroundView = selectedView 
} 
で、このようなコードを記述する必要があります

または、あなたは直接それを定義することができますcollectionView:cellForItemAt方法

UPD

からウルViewController Yerkebulan Abildinが述べたように、このコードを使用すると、ペン先からあなたUICollectionViewCellを作成する場合にのみ動作します。コードから作成する場合、initメソッドでselectedBackgroundViewを定義することができます(awakeFromNibは呼び出されません)

+0

awakeFromNibはinitメソッドからロードされても動作しません –

関連する問題