Например:
Существует ячейка tableView, в которой находится collectionView, и каждая ячейка collectionView относится к товару.
Когда я щелкаю одну ячейку коллекции ViewView, страница переходит к деталям товаров ViewController.
Теперь есть два способа достичь этого.
Одним из обычных способов является использование делегата для отправки значения в контроллер:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
if ([self.delegate respondsToSelector:@selector(limitTimeSaleCell:clickedItemAtIndex:)]) {
[self.delegate limitTimeSaleCell:self clickedItemAtIndex:indexPath.row];
}
}
Другой способ - получить текущий viewController, затем перейти :
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
NSString *goodsID = self.model.goods[indexPath.row];
CQGoodsAllInfoViewController *goodsDetailViewController = [[CQGoodsAllInfoViewController alloc] initWithGoodsID:goodsID];
// get current viewController
CWFSpecialSaleViewController *currentViewController = (CWFSpecialSaleViewController *)[self getCurrentViewController];
// jump
[currentViewController gotoGoodsDetailViewControllerWithGoodsID:goodsID];
}
Способ получения viewController для текущего представления:
- (UIViewController *)getCurrentViewController{
for (UIView* next = [self superview]; next; next = next.superview)
{
UIResponder *nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]])
{
UIViewController *vc = (UIViewController *)nextResponder;
return vc;
}
}
return nil;
}
Разумен ли второй способ? Я чувствую, что он идет вразрез с обычной архитектурой MVC.