Перемещение UINavigationBar за пределы экрана, но область под ним не сенсорная - PullRequest
1 голос
/ 10 января 2012

Я пытаюсь создать такой же «Выбор области», как в приложении «Путь». Идея состоит в том, чтобы на панели навигации была кнопка, которая заставит контроллер соскользнуть, чтобы открыть «селектор» данных.

Учитывая следующую структуру пользовательского интерфейса:

UI View structure

Основным контроллером является UINavigationController, так как мне нужно добавить дополнительные уровни информации позже.

В основном это работает так:

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

Data table visible

После нажатия на элемент навигации он переместит навигационную панель, панель инструментов и табличный вид в сторону, чтобы открыть таблицу выбора. Вид:

Selector table visible

Код, который удаляет все:

- (IBAction)toggleAreaSelector:(id) sender {
    float offsetX = self.tableView.frame.origin.x == 0 ? 300 : -300;

    [UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationCurveEaseIn animations:^{
        self.navigationController.navigationBar.frame = CGRectOffset(self.navigationController.navigationBar.frame, offsetX, 0);
        self.toolBar.frame = CGRectOffset(self.toolBar.frame, offsetX, 0);
        self.tableView.frame = CGRectOffset(self.tableView.frame, offsetX, 0);
    } completion:^(BOOL finished) {
        self.navigationController.navigationBar.userInteractionEnabled = offsetX == 300 ? NO : YES;
        self.tableView.userInteractionEnabled = offsetX == 300 ? NO : YES;
    }];
}

Проблема в следующем: Я не могу щелкнуть первый элемент в селекторе «Область 0». Я думаю, это потому, что UINavigationBar по-прежнему удерживает «сенсорный» замок в этой области и получает все касания.

Возможно, это также связано с тем, что при отображении в конструкторе интерфейсов я также вижу, что мой селектор находится на позади на UINavigationBar. В конце концов, это может быть неправильный подход?

Спасибо за любые идеи.

Ответы [ 2 ]

0 голосов
/ 14 января 2012

Рад, что нашел решение сейчас.

Ссылка

@ jonkroll была наиболее полезной, поскольку другие люди успешно пытались реализовать этот шаблон пользовательского интерфейса ранее.

Ключевой вопрос - использование

[self addChildViewController:self.leftViewController];
[self.view addSubview:self.leftViewController.view];

Таким образом, каждый контроллер представления управляется независимо и наиболее важно: то же самое для его представления.

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

0 голосов
/ 10 января 2012

почему вы перемещаете его с экрана? Почему бы просто не выдвинуть новый контроллер представления с новым представлением таблицы с вашими областями?

Areas *secondViewController = [[Areas alloc] initWithNibName:@"Areas" bundle:nil];
[self.navigationController pushViewController:secondViewController animated:YES];
[secondViewController release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...