Сохранить новый вид на вкладке при переходе на другую вкладку - PullRequest
0 голосов
/ 07 декабря 2010

Это ситуация:

У меня есть панель вкладок с 2 вкладками. Tab01 и Tab02. В Tab01 у меня есть кнопка, которая нажимает repVC:

    repVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:repVC animated:YES];
    [(UIViewController *)[tabController.viewControllers objectAtIndex:0] setView:repVC.view];
    [repVC release];

Внутри repVC У меня есть еще одна кнопка, которая нажимает MFMailComposerViewController :

    MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
    [self presentModalViewController:mail animated:YES];
    [mail release];

Проблема заключается в том, что при отображении mailView (в Tab01) и нажатии Tab02, затем обратно на Tab01, mailView скрывается, и даже если я снова нажму кнопку электронной почты, представление не будет отображаться.

Итак, что у меня есть:

Tab01.view -> repVC.view -> mail.view 

Для repVC я использую эту строку, когда нажимаю на вид, чтобы, даже если я переключаю вкладки, этот вид все равно будет активирован:

   [(UIViewController *)[tabController.viewControllers objectAtIndex:0] setView:repVC.view];

Но я не могу сделать то же самое для mail , потому что tabController объявлен в другом классе, который я не могу импортировать. Поэтому я не могу получить доступ к tabController и установить представление для Tab01.

Надеюсь, что редактирование помогло пониманию.

Ответы [ 3 ]

1 голос
/ 07 декабря 2010

Хм,

Я бы все же предложил использовать NavigationController. Это упростит задачу, будет соответствовать рекомендациям и предложениям Apple и будет реализовано довольно быстро. (Просто создайте Navigationcontroller, поместите View of Tab1 в качестве основного вида и передайте его TabbarController. Затем для mailView используйте [self.navigationController pushViewController: mail animated: YES]; Затем navcontroller «сохраняет» текущий вид для вас когда вы переключаете вкладки)

Но если по какой-то причине вам нужно использовать modalViewcontroller, вы можете либо просто деактивировать панель вкладок, пока отображается ModalView, либо попробовать реализовать переключатель или простой случай if ... else в вашем ViewWillAppear, где вы проверяете, какой экран нагрузки. Затем очистите окно и загрузите правый экран.

Надеюсь, вы поняли, что я имею в виду, иногда мой способ письма, кажется, сбивает людей с толку. ^^

0 голосов
/ 07 декабря 2010

Как отмечает @Amandir, вы можете решить свои проблемы, используя UINavigationController.У меня такое ощущение, что вы пытаетесь немного злоупотребить концепцией контроллера модального представления, и поэтому он не работает так, как вы ожидаете.Когда вы используете presentModalViewController:animated:, должно быть, что вы отображаете модальное представление, то есть пользователь должен взаимодействовать и отклонять модальное представление, прежде чем он сможет продолжить.выше означает, что когда вы представляете контроллер модального представления, не должно быть возможным использовать панель вкладок.Так как вы используете слово «push», я предполагаю, что вы хотели бы изменить представление Tab01, сохраняя при этом возможность использовать функциональность панели вкладок.Проблема в том, что кроме UINavigationController нет никакого встроенного метода отправки контроллеров представления.persentModalViewController:animated: следует использовать только в том случае, если вы хотите модальный вид, который на iPhone означает полноэкранный вид.

Самый простой способ - использовать UINavigationController и скрыть панель навигации.Тогда вы получите функциональность, которая, я думаю, вам нужна.Другой вариант - добавить и удалить вложенные виды вручную.

[self.view addSubview:repVC.view];

и

[repVC.view removeFromSuperview];
[self.view addSubview:mail.view];

Вы можете использовать блочную анимацию, если вам нужны какие-то необычные переходы.

0 голосов
/ 07 декабря 2010

Немного больше информации было бы здорово.

Как вы настроили свой TabbarController?

Как вы продвигаете новый взгляд?Внутри UINavigationController?Если нет, то сделайте это с помощью navController, он должен сохранить реальное состояние просмотра и ваша проблема должна быть решена.

Если вы уже используете navController, опубликуйте ваши ViewDidLoad и ViewWillAppear для Viewcontroller из Tab 1

...