2013-11-12 2 views
0

В моем приложении я использую PSCollectionView для создания пользовательского коллекционного представления. Я все данные, готовые создать представление, но когда я выполняю код не вызывается методPSCollectionView не выполняет cellForRowAtIndex

- (PSCollectionViewCell *)collectionView:(PSCollectionView *)collectionView cellForRowAtIndex:(NSInteger)index` 

я искал на StackOverflow, и я вижу, что другой человек имеет те же проблемы (link), но Я не понимаю, как он решил, поэтому решил написать вопрос, чтобы понять, как назвать этот метод. Я надеюсь, что есть кто-то, кто может помочь мне найти способ решить эту проблему.

UPDATE:

Вот viewDidLoad код:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    tempArray = [[NSMutableArray alloc]init]; 
    self.navBar.title = self.category; 
    NSString *stringUrl = [NSString stringWithFormat:@"http://54.204.6.246/magento8/api/rest/products/?category_id=%d", self.categoryId]; 
    [self sendRequestToURL:stringUrl withMethod:@"GET"]; 
    // Inizio sezione di codice per la creazione della PSCOLLECTIONVIEW 
    psView = [[PSCollectionView alloc]init]; 
    // Imposto il delegato per la gestione della scrollView 
    psView.delegate = self; 
    // Imposto il delegato per la collection view 
    psView.collectionViewDelegate = self; 
    // Imposto il delegato per il data source della collection view 
    psView.collectionViewDataSource = self; 

    psView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

    // Controllo il tipo di device e a seconda del dispositivo trovato creo le colonne e le righe 
    if ([[UIDevice currentDevice].model isEqualToString:@"iPhone"]) { 
     psView.numColsPortrait = 2; 
     psView.numColsLandscape = 4; 
    } else { 
     psView.numColsPortrait = 2; 
     psView.numColsLandscape = 4; 
    } 

    // Aggiungo la vista appena creata 
    [self.view addSubview:psView]; 
} 

А вот код делегата:

#pragma mark - PSCollection Delegate e Data Source 

- (NSInteger)numberOfRowsInCollectionView:(PSCollectionView *)collectionView { 
    return [self.arrayWithData count]; 
} 

- (CGFloat)collectionView:(PSCollectionView *)collectionView heightForRowAtIndex:(NSInteger)index { 
// NSDictionary *item = [self.arrayWithData objectAtIndex:index]; 
//  
// return [ProductViewCell heightForViewWithObject:item inColumnWidth:psView.colWidth]; 
    return 100.0f; 
} 

- (PSCollectionViewCell *)collectionView:(PSCollectionView *)collectionView cellForRowAtIndex:(NSInteger)index { 
    ProductViewCell *cell = (ProductViewCell *)[psView dequeueReusableViewForClass:nil]; 
    if (!cell) { 
     cell = [[ProductViewCell alloc]initWithFrame:CGRectZero]; 
    } 
    cell.labelName.text = [[self.arrayWithData objectAtIndex:index]objectForKey:@"name"]; 
    NSURL * url = [NSURL URLWithString:[[self.arrayWithData objectAtIndex:index]objectForKey:@"url"]]; 

    [cell.productImage setImageWithURL:url 
          completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { 

           //[[[SDWebImageManager sharedManager] imageCache] removeImageForKey:yacht.thumbnail fromDisk:NO]; 
           [[[SDWebImageManager sharedManager] imageCache] clearMemory]; 


          }]; 
    return cell; 
} 

ответ

2

Должна быть проблема с делегатом. Взгляд @ Github пример использования:

self.collectionView = [[PSCollectionView alloc] initWithFrame:CGRectZero]; 
self.collectionView.delegate = self; // This is for UIScrollViewDelegate 
self.collectionView.collectionViewDelegate = self; 
self.collectionView.collectionViewDataSource = self; 
self.collectionView.backgroundColor = [UIColor clearColor]; 
self.collectionView.autoresizingMask = ~UIViewAutoresizingNone; 

Таким образом, вы должны установить делегат 3 раза. Вы назначили все из них?

И еще. База на документах в Github:

- (Class)collectionView:(PSCollectionView *)collectionView cellClassForRowAtIndex:(NSInteger)index { 
    return [PSCollectionViewCell class]; 
} 

- (NSInteger)numberOfRowsInCollectionView:(PSCollectionView *)collectionView { 
    return 0; 
} 

- (UIView *)collectionView:(PSCollectionView *)collectionView cellForRowAtIndex:(NSInteger)index { 
    return nil; 
} 

- (CGFloat)collectionView:(PSCollectionView *)collectionView heightForRowAtIndex:(NSInteger)index { 
    return 0.0; 
} 

Проверьте, вызван ли все другой метод. Проверьте вывод numberOfRowsInCollectionView, потому что если вы вернетесь 0 в этом методе, ваш cellForRowAtIntex: никогда не будет вызываться.

EDIT Попробуйте изменить линию:

psView = [[PSCollectionView alloc]init]; 

To:

psView = [[PSCollectionView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)]; 

Это должно сделать вас полный экран PSCollectionView.

+0

Спасибо за ответ, я установил весь делегат, как это записано в документации Git, затем я проверяю, сколько строк и когда я пишу 'NSLog' Я видел, что он возвращает 2, не знаю, почему он не вызывает коллекцию Collection Collection: (PSCollectionViewCell *): (PSCollectionView *) collectionView cellForRowAtIndex: (NSInteger) index'. Вызывается два других метода делегата. Другой человек, у которого такая же проблема, говорит, что я должен установить кадр экземпляра PSCollectionView, но как я могу это сделать? – lucgian841

+0

Я обновил свой ответ. – Kuba

+0

СПАСИБО !!! Я вижу рамку! Теперь я должен установить правильную информацию в этих ячейках. – lucgian841

0

Похоже, вы должны установить DataSource для вас CollectionView в классе, где вы реализуете cellForRowAtIndex, например:

collectionView.dataSource = self; 
+0

Это не необычный вид коллекции, перейдите на сайт git и посмотрите на меня. У меня нет никаких вещей на моем раскадровке/xib, и я задал весь делегат, в котором я нуждаюсь. Я обновлю свой вопрос, чтобы показать вам – lucgian841

+0

Посмотрите, что я обновляю свой вопрос – lucgian841

Смежные вопросы