Идет ли это вразрез с архитектурой MVC, если я выполняю просмотр страницы в поле зрения? - PullRequest
0 голосов
/ 15 мая 2018

Например:

Существует ячейка tableView, в которой находится collectionView, и каждая ячейка collectionView относится к товару.

enter image description here

Когда я щелкаю одну ячейку коллекции 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.

1 Ответ

0 голосов
/ 15 мая 2018

Даже если вы можете, вы не должны выполнять переход по страницам в представлении.Представление должно отвечать только за отображение пользовательского интерфейса, и все задачи навигации должны выполняться контроллером представления.

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

Надеюсь, что это ответ:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...