Несколько UIViewControllers одновременно - PullRequest
0 голосов
/ 18 февраля 2011

Я хотел бы иметь UITableView в контроллере навигации, занимающий весь экран.У меня есть меньший пользовательский UIView, который должен скользить снизу вверх, сжимая вид таблицы на 100 пикселей.Настраиваемое представление должно быть статичным, не перемещаться, пока пользователь перемещается по таблице.Мне сказали, что на одном экране не должно быть двух UIViewControllers (VC), управляющих представлениями.

В настоящее время мой AppDelegate добавляет подпредставление в свое окно из VC, который затем загружает представление таблицы и пользовательское представление с помощью

[self addSubview: tablviewcontroller.view];[self addSubview: customViewController.view];

Как это должно быть реализовано?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2011

Хорошо. Вам нужен контроллер навигации, корневым представлением которого является табличное представление. Затем, возможно с помощью пользовательского ввода, вы хотите, чтобы это табличное представление увеличилось на 100 пикселей, а другое представление имеет место внизу. Пока другое представление остается, пользователь может продолжать использовать представление таблицы.

Вот как бы я это сделал:

Создайте контроллер общего вида (назовем его NavigationWithAuxiliaryViewController). Корневое представление этого класса охватывает все окна вашего приложения.

Это представление имеет экземпляр UINavigationController в качестве свойства, скажем, navController. Он также имеет UIView (для другого представления) в качестве своего свойства (скажем, auxView). Расположите другой вид внизу. Однако это представление по умолчанию скрыто. Кроме того, рамка корневого представления UINavigationController охватывает весь вид.

Когда вы решите сжать табличное представление, измените frame свойство UINavigationController. Сделайте что-то вроде этого (но не так ужасно):

if (slideViewOn) {
    [UIView beginAnimations:@"slideUp" context:nil];
    navController.view.frame = CGRectMake(0, 0, 320, 260);
    auxView.hidden = NO;
    [UIView commitAnimations];
} else {
    [UIView beginAnimations:@"slideDown" context:nil];
    navController.view.frame = CGRectMake(0, 0, 320, 480);
    auxView.hidden = YES;
    [UIView commitAnimations];
}

Самый простой способ сжать весь материал навигации / таблицы - это изменить весь кадр для контроллера навигации, поэтому вам нужно отдельное представление (вне контроллера навигации) для другого представления.

0 голосов
/ 18 февраля 2011

Я бы структурировал это следующим образом: иметь подкласс UIViewController, вид которого занимает весь экран.У него будет два подпредставления.Первое подпредставление: представление UINavigationController, которое содержит ваш контроллер табличного представления.Второе подпредставление: пользовательский UIView.

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

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

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