如果用户选择任何单元格意味着需要转到目标视图控制器,我有一个集合视图控制器。
-(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;
}
我尝试使用此代码但工作不正常请帮我找出问题。
答案 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;
}