Нажмите контроллер представления из таблицы, встроенной в UIScrollView

Структура на мой взгляд выглядит следующим образом. Я показываю обложку каждой главы каталога в представлении заголовка UITableView и отображаю подразделы каждой главы в соответствующем табличном представлении. Все это встроено в UIScrollView подкачки, который является rootViewController для навигационного контроллера. Стек:

UINavigationController (controlled by CatMainViewController [UIViewController])
    UIScrollView       (controlled by CatMainViewController [UIViewController])
        UITableView    (controlled by SectionViewController [UITableViewController])

Я хотел бы знать, как я могу общаться с CatMainViewController из метода didSelectRowAtIndexPath в моем SectionViewController, чтобы сообщить контроллеру навигации нажать контроллер представления, который загружает документ.

Я пробовал что-то вроде:

#import "CatMainViewController.m"
[CatMainViewController.self.navigationController pushViewController:newView animated:YES];

Но, очевидно, это не сработало так хорошо. Любая помощь будет принята с благодарностью! Спасибо.


person Steve Spry    schedule 22.09.2012    source источник


Ответы (1)


Вы можете передать ссылку экземпляра CatMainViewController экземпляру SectionViewController, например:

/* SectionViewController.h */
@class CatMainViewController;

@interface SectionViewController

// ... some properties/methods
@property (nonatomic, assign) CatMainViewController *catMainVC;
// ... more properties/methods

@end

/* SectionViewController.m */
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // ... some code
    [self.catMainVC.navigationController pushViewController:someVC animated:YES];
}

/* CatMainViewController.m */
#import "SectionViewController.h"

// when creating the SectionViewController
SectionViewController *sectionViewController = ...;
sectionViewController.catMainVC = self;

Это похоже на схему делегата/@protocol, которую использует Apple.

person neilvillareal    schedule 22.09.2012
comment
Большое спасибо за совет. Я пробовал что-то в этом роде, но не смог соединить все точки. Я очень ценю быстрый ответ. - person Steve Spry; 23.09.2012
comment
когда я пытаюсь ввести [self.catMainVC.navigationController...... ], у меня это не работает. Здесь не хватает строки? - person Steve Spry; 23.09.2012
comment
Вам просто нужно убедиться, что @property ... catMainVC находится в SectionViewController.h, а @synthesize catMainVC; — в SectionViewController.m. - person neilvillareal; 23.09.2012