集合视图didSelectItemAtIndexPath segue

时间:2015-12-22 08:24:49

标签: objective-c uicollectionview

我很长时间都在努力解决这个问题。

原因是我收藏了delegate& “datasource”下的CollectionView不是“CollectionView Controller”,因为我在collectionView单元格中嵌入了一个TableView

但是当我想设置

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)
{
}

这是我的代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString * Cell;
if (indexPath.section==0)
{
    switch (indexPath.row)
    {
        case 0:
            Cell = @"MoviesIntro";
            break;
        case 1:
            Cell = @"影片介紹";
            break;
        case 2:
            Cell = @"Moviesrelative";


            default:
            break;
    }
}
 
UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:Cell];
if (!cell)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Cell];
}

switch (indexPath.row)
{
    case 0:
    {

    }
    break;
    case 1:
    {

    }
        break;
    case 2:
    {

        Tony=(CollectionView*)[cell viewWithTag:741];
        Tony.pageImages =imagearray;
        [Tony reloadData];

    }
        break;

    default:
        break;
}
    return cell;

}

这是CollectionView.m代码

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

{
    self.pic_url=[comment[indexPath.row] objectForKey:@"pic_url"];
    self.name_zh=[comment[indexPath.row] objectForKey:@"name_zh"];
    self.name_en=[comment[indexPath.row]objectForKey:@"name_en"];
    self.intro=[comment[indexPath.row] objectForKey:@"short_Intro"];
    self._id=[comment[indexPath.row] objectForKey:@"_id"];
    self.trailer=[comment[indexPath.row] objectForKey:@"trailer"];
    self.movieTime=[comment[indexPath.row] objectForKey:@"movieTime"];
    self.picH_url=[comment[indexPath.row] objectForKey:@"picH_url"];
    self.category=[comment[indexPath.row] objectForKey:@"category"];
    self.director=[comment[indexPath.row] objectForKey:@"director"];
    self.actor=[comment[indexPath.row] objectForKey:@"actor"];
    self.language=[comment[indexPath.row] objectForKey:@"language"];
    self.MyList=false;
    [UIView animateWithDuration:0.05 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
    } completion:^(BOOL finished) {

    }];

}

Tony是Collection view.h / m文件。 pageImages是Tony.h文件中的NSMutableArray。

转到其他视图控制器,在对象上找不到属性,所以我甚至不知道我能做什么才有人有好主意?

2 个答案:

答案 0 :(得分:0)

您可以设置添加delegate的{​​{1}}变量和委托方法,例如:

UITableViewCell

然后在- (void) pushToViewController; 文件中使用collectionView委托方法添加:

YourTableViewCell.m

“tableView Controller”应该是- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *){ [delegate pushToViewController]; } 的代理人,在tableViewCell的控制器中:

UITableView

答案 1 :(得分:0)

威廉胡的建议会奏效。

通常,您不应让UI项目实现自己的委托和数据源。它有效,但打破了MVC模式。而不是我使用一些自定义UICollectionView来保存对它所属的表的行的一些引用。你甚至可以'滥用'标签属性(我个人不喜欢,但这是一个非常常见的模式),而不需要子类UICollectionView。

您的UITableViewController也可以为集合视图实现数据源和委托。在每次调用任何委托方法时,都会将对thisView的引用传递给方法,以便您可以从那里获取表的行(当然,您必须在表视图的cellForRowAtIndexPath中设置它)并从那里开始。

因此,我宁愿建议重新分解您的代码并坚持使用MVC模式。