UIViewController, чтобы узнать, толкнул ли он или выскочил? - PullRequest
5 голосов
/ 20 декабря 2011

У меня есть основной UITableView, когда ячейка нажата, она переходит к другому UITableView, а когда ячейка нажата там, она переходит к DetailView этой ячейки.

Я хочу, чтобы средний UITableView вел себя по-разному, в зависимости от того, всплыл ли detailView или сам UITableView. Если представление было перенесено из основной таблицы, я хочу прокрутить его до вершины, если оно отображается после того, как DetailView получил, я хочу, чтобы оно оставалось в той же позиции.

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 20 декабря 2011

вы можете вызвать метод scrollToTop в DetailViewController после того, как вы поместили его в navigationController.

Примерно так:

if (!detailViewController) {
    detailViewController = [[DetailViewController alloc] initWithNibName:nil bundle:nil];
}
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController scrollToTop];
// or use the tableView directly: 
// [detailViewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
1 голос
/ 21 декабря 2011

В вашем контроллере среднего вида проверьте, какое представление является ближайшим к отображению непосредственно из стека UINavigationController:

- (void)viewWillDisappear:(BOOL)animated
{
    if ([self.navigationController.topViewController isEqual:(UITableViewController *)tvcDetailView]) {
        // Detail view has been pushed onto the UINavigationController stack
    }
    else {
        // Middle view has been popped from the UINavigationController stack
    }
}
0 голосов
/ 20 декабря 2011

Создайте BOOL @property в своем среднем свойстве UIViewController с именем wasPushed или чем-то подобным, и когда вы инициализируете его из UIViewController 1, установите свойство для нового экземпляра, поместите его в стек навигации и затем сможете использоватьВаше свойство в методах loadView, viewDidLoad, viewWill/DidAppear вашего контроллера среднего вида.

Как только вы его используете, установите его обратно в FALSE или NO (или что-то еще), и когда вы закончитеесли вы вернетесь к нему из-за отключения вашего третьего контроллера представления, вы получите его как FALSE / NO в ваших loadView, viewDidLoad и т. д. методах.

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