Метод делегирования UICollectionView «didSelectItemAtIndexPath» не вызывается, когда представление UICollection используется в UITableViewCell

#ios #objective-c #uitableview #uicollectionview #uicollectionviewcell

#iOS #objective-c #uitableview #uicollectionview #uicollectionviewcell

Вопрос:

Я использовал UICollectionView в своей UITableViewCell, все работает нормально, по-прежнему загружая представление коллекции и отображая его ячейку, но после загрузки представления коллекции я не смог получить метод делегирования представления коллекции «didSelectItemAtIndexPath» при нажатии на ячейку представления коллекции.

Мое табличное представление со статической ячейкой, и я помещаю представление коллекции в эту ячейку

Также определите делегат и источник данных для него

Вот мой код, вызывается метод источника данных, но делегат не вызывается

 #pragma mark - collectionView data source


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 10;
}

// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collCell" forIndexPath:indexPath];
    UIImageView *imgDocCell = (UIImageView *)[cell viewWithTag:100];
    imgDocCell.image = self.imgFileToChart;
    cell.layer.borderWidth=1.0f;
    cell.layer.borderColor=commonThemeColor.CGColor;
    return cell;
}


#pragma mark - collectionView delegate

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"%@",indexPath);
}
  

Комментарии:

1. Куда добавляется collectionView data source код?

2. Я думаю, что он использует метод делегирования tableview. Поместите точку останова в метод делегирования tableview и проверьте его

3. @Mr.Bista в моем контроллере tableview

4. Просто проверьте это, и если он использует метод делегирования tabelview, затем отключите пользовательское взаимодействие для этой ячейки, тогда оно работает для делегирования collectionview

5. @jecky: я попробую, спасибо

Ответ №1:

Удалите выход collectioview, а также делегирование и источник данных, см. Вывод ЗДЕСЬ

вы должны написать свой код следующим образом

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return 1;   
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyIdentifier = @"cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    // Here tableviewcell inside one collection view create with tag 10
    UICollectionView *coll =(UICollectionView*)[cell viewWithTag:10];
    coll.delegate = self;
    coll.dataSource = self;

    return cell;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 3;
}

// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell1 = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell2" forIndexPath:indexPath];
    // in collectionview storyboard one UIImageview with tag 20
    UIImageView *imgDocCell = (UIImageView *)[cell1 viewWithTag:20];
    imgDocCell.image =[UIImage imageNamed:@"add.jpeg"];

    return cell1;
}

#pragma mark - collectionView delegate

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"%@",indexPath);
}
  

Комментарии:

1. Кто дает этому сообщению отрицательный ответ? Пожалуйста, проверьте код и, если он неправильный, уменьшите его

2. Вы не можете указать пользователю копировать-вставлять ваш код, когда вы пишете что-то вроде UICollectionView *coll =(UICollectionView*)[cell viewWithTag:10]; . Что это?

3. @Lucad’Alberti См. братан, Программист должен понимать, что я должен указать здесь свой собственный тег

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

5. @Lucad’Alberti Да, это обычное дело, я даю его решение. Дайте выход всему, что находится в ячейке tableview, если вы получите сообщение об ошибке или нет, просто ответьте мне