2013-01-21 2 views
0

첫 번째, 대답은 매우 분명하지만 iOS 개발에 새로운 점입니다 (예 : P는 게임을하는 첫 번째 앱이기 때문에 PokerStrategy.com : P) 그래서 내 문제가 다소 사소하다는 확률이 꽤 높습니다.초보자를위한 UICollectionView 설정 도움말

코드 (Xcode의 프로젝트를 포함하는 zip 파일) : 내가 거기에 그 :) 해로운의 다른 아무것도 약속

http://www.mediafire.com/?p55xw0q2dwwwwvm

.

문제 : 다음있어

: 내가 함께 놀러 할 수있는 UICollectionView을 시도하고있어

http://www.techotopia.com/index.php/An_iPhone_iOS_6_Storyboard-based_Collection_View_Tutorial

. 나는 "응용 프로그램 테스트"절로 넘어갔습니다. 나는 가이드에서 몇 가지 부분에 내 자신의 스핀을 넣어 :

  1. 대신 다른 그림을 사용, 난 그냥 단지에 숫자를 가지고 하단에 라벨을 한 사진을 사용합니다. 번호가 동적으로 설정됩니다. 그래, 내가 사용하고있는 배열없이 구현할 수 있지만, 배열을 가지고 있으면이 프로젝트의 범위를 앞으로 확장해도 도움이 될 것입니다.

  2. 뷰 레이아웃을 플로우 레이아웃으로 설정하는 코드를 viewDidLoad에 추가했습니다. futureproofing을 위해이 작업을 다시 수행했습니다. 기본 폼에서이 작업을 수행하면 flowlayout을 서브 클래 싱해야하는 서식을 가지고 놀고 싶기 때문입니다.

코드는 오류없이 컴파일하지만 아무것도 화면에 나타 없습니다. 나는 약 1-2 시간 동안 자신의 능력을 최대한 발휘하도록 코드를 확인했지만 아무런 차이가 없었습니다. 내 컨트롤러 클래스는 화면에 표시되도록 컬렉션보기를 가져 오려고하는 뼈다귀 뼈다. 내 셀 클래스는 이미지 뷰와 레이블이있는 베어 본 셀입니다.

이 작업을 수행 할 수있는 도움을 주셔서 감사합니다!

tl; dr 굵게 표시된 부분 만 확인하십시오. 코드 편의를 위해 아래에 제공 :

MyCollectionViewController.m

#import "MyCollectionViewController.h" 

    @interface MyCollectionViewController() 
    @property (nonatomic, strong) NSMutableArray *dataArray; 
    @end 

    @implementation MyCollectionViewController 

    @synthesize dataArray = _dataArray; 

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
    { 
     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
     if (self) { 
      // Custom initialization 
     } 
     return self; 
    } 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     // Create data to display 
     for(int i = 0; i < 50; i++){ 
      [self.dataArray addObject:[NSString stringWithFormat:@"%d", i]]; 
     } 

     // Configure Layout 
     UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; 
     [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; 
     [self.collectionView setCollectionViewLayout:flowLayout]; 

    } 

    - (void)didReceiveMemoryWarning 
    { 
     [super didReceiveMemoryWarning]; 
     // Dispose of any resources that can be recreated. 
    } 

    #pragma mark - 
    #pragma mark UICollectionViewDataSource 

    -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
    { 
     return 1; 
    } 

    -(NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section 
    { 
     return [self.dataArray count]; 
    } 

    -(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
    { 
     MyCollectionViewCell *myCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath]; 
     int row = [indexPath row]; 
     UIImage* image = [UIImage imageNamed:@"200px-AND_ANSI"]; 
     myCell.cellTitle = [self.dataArray objectAtIndex:row]; 
     myCell.cellImageView.image = image; 
     myCell.backgroundColor = UIColor.whiteColor; 

     return myCell; 
    } 

MyCollectionViewcontroller.h

#import <UIKit/UIKit.h> 
#import "MyCollectionViewCell.h" 

@interface MyCollectionViewController : UICollectionViewController <UICollectionViewDataSource, UICollectionViewDelegate> 

@end 

MyCollectionViewCell.h

#import <UIKit/UIKit.h> 

@interface MyCollectionViewCell : UICollectionViewCell 
@property (strong, nonatomic) IBOutlet UIImageView *cellImageView; 
@property (strong, nonatomic) IBOutlet UILabel *cellTitle; 

@end 
,536,

MyCollectionViewCell.m

#import "MyCollectionViewCell.h" 

@implementation MyCollectionViewCell 

@synthesize cellImageView = _cellimageView; 
@synthesize cellTitle = _cellTitle; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
} 
*/ 

@end 

답변

1

self.dataArray이 곳 코드에서 초기화/할당되지 따라서 nil 동일하다. nil에 메시지를 보내기는 허용되지만 아무런 효과가 없습니다 따라서도

for(int i = 0; i < 50; i++){ 
    [self.dataArray addObject:[NSString stringWithFormat:@"%d", i]]; 
} 

self.dataArray 여전히 nil 후, 그리고 [self.dataArray count] 반환 0된다.

당신은 할당 및 적절한 위치 뷰 컨트롤러의 일부 initXXX 방법

self.dataArray = [[NSMutableArray alloc] init]; 

으로 어레이를 초기화한다. 뷰 컨트롤러가 스토리 보드 파일에서 인스턴스화하지만 initWithNibName:가 호출되지 않습니다, 대신 initWithCoder:을 사용할 수 있습니다

- (id)initWithCoder:(NSCoder *)coder 
{ 
    self = [super initWithCoder:coder]; 
    if (self) { 
     self.dataArray = [NSMutableArray array]; 
    } 
    return self; 
} 
+0

사실! @synthesize가 아무것도 초기화하지 않는다는 사실을 잊어 버렸습니다. 그러나 dataArray는 셀의 레이블에만 영향을줍니다. 이런 식으로 전체 uicollection보기에 아무 것도 표시되지 않을까요? 콜렉션 뷰를 올바로 설정했다면 레이블이 '0'인 셀이 표시됩니다. 나는 나중에 오늘 시험 할 것이고 이것이 문제를 해결하는지 여부에 관해서 돌아올 것이다. – Dae314

+0

@ Dae314 :'numberOfItemsInSection' 메쏘드는'[self.dataArray count]'를 리턴하는데,'dataArray'가 초기화되지 않았다면 0입니다. 따라서 콜렉션 뷰에는 * 항목이 없습니다. –

+0

훌륭하고 설명이 합리적이며 변경을 구현하면이 문제가 해결됩니다. 고마워요! 죄송합니다. 더 이상 보상 해 드릴 수 없습니다. 아직 투표 할 수 없습니다. – Dae314

관련 문제