如何使用indexpath值设置目标视图控制器?

时间:2015-07-23 06:53:44

标签: objective-c segue uicollectionviewcell nsindexpath

如果用户选择任何单元格意味着需要转到目标视图控制器,我有一个集合视图控制器。

  -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        cell=[collectionview cellForItemAtIndexPath:indexNumberStorager];
        NSInteger indexnum;
        indexnum=indexNumberStorager.row;
        switch (indexnum) {
            case 1:
                if ([segue.identifier isEqualToString:@"Car"])
                {
                    CarCleaningVC *dest = [segue destinationViewController];


                }
                break;

            default:
                break;
        }

我尝试使用此代码但工作不正常请帮我找出问题。

2 个答案:

答案 0 :(得分:0)

sender这里是用户选择的单元格(如果segue在单元格选择上)。您无需在任何地方存储indexPath

只需将sender强制转换为UICollectionViewCell(或您的子类,如果您正在使用任何子类),并在集合视图上调用indexPathForCell:以获取indexPath

示例代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    NSUInteger indexNum = [self.collectionView indexPathForCell:(UICollectionViewCell*)sender].row;

    switch (indexNum)
    // Relevant code
}

此外,不要依赖于segue identifier,而是尝试使用destinationViewController的类:

if ([segue.destinationViewController isKindOfClass:[CarCleaningVC class]]) {
    //relevant code
}

答案 1 :(得分:0)

你可以这样做 - 在cellForItemAtIndexPath方法中,设置单元格标记。像 -

这样的东西
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
    cell.tag=indexPath.row;
    return cell;
} 

然后,当您将发件人转换为单元格时,您只需访问其标记即Collection View的Indexpath.row。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{
     UICollectionViewCell *cell=(UICollectionViewCell*)sender;
     NSInteger indexnum;
     indexnum=cell.tag;
    switch (indexnum) {
        case 1:
            if ([segue.identifier isEqualToString:@"Car"])
            {
                CarCleaningVC *dest = [segue destinationViewController];


            }
            break;

        default:
            break;
    }