2010-01-24 2 views
2

В моем делете приложения я создаю контроллер табуляции с кучей контроллеров представления для него, а затем отдельный UIViewController, который я показываю как самый верхний вид, пока пользователь не выполнит определенные действия.UIView не отвечает на касания после 'removeFromSuperview'

Я изначально закрываю контроллер моей вкладки вторым контроллером, но в итоге второй контроллер отклоняется с помощью 'removeFromSuperview'. Однако после этого просмотр контроллера табуляции не будет реагировать на любые нажатия или любое взаимодействие с пользовательским интерфейсом. Мое приложение не висит, так как я вижу, что обработка происходит.

Есть ли способ заставить контроллер табуляции стать де-факто ответчиком после того, как верхний вид отклонен?

Вот как я изначально создавать как контроллеры Вид:

{ 
// main navigation controller is a tab bar 
UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
tabBarController.viewControllers = [NSArray arrayWithObjects: controller1, 
            controller2, 
            controller3, nil]; 

// Add the tab bar to the view 
[window addSubview:tabBarController.view]; 


// Creating the 2nd navigation controller - covering up the tab bar 
// temporarily 
UIViewController *viewController = [[MySecondViewController alloc] 
             initWithNibName:@"SomeView" 
             bundle:nil]; 

UINavigationController *navController = [[UINavigationController alloc] 
      initWithRootViewController:viewController]; 

[viewController release]; 

// Configure and show the second navigation controller 
[window addSubview:[navController view]];  

// Make everything visible 
[window makeKeyAndVisible]; 
} 

Как самый верхний вид уволен:

@interface MySecondViewController : UIViewController 
{ 
} 
-(void)dismissMe; 
@end 

@implementation MySecondViewController 
-(void)dismissMe 
{ 
    // Here, the this view is getting removed 
    [self.view removeFromSuperview];   
} 
@end 

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

ответ

0

Я думаю, что ваш вкладка по-прежнему «2-го» в списке. Вы пытались добавить:

bringSubviewToFront:

перемещает указанный подвид в перед своими братьями и сестрами. - (void) bringSubviewToFront: (UIView *) view Вид параметров Подводка для перемещения на передний план. Наличие * Доступно в iPhone OS 2.0 и новее. Смотрите также * - sendSubviewToBack: Объявлен в UIView.h

Если это не поможет, вам, возможно, потребуется установить TabBar в качестве первого ответчика.

- (BOOL)canBecomeFirstResponder { 
    returnYES; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self becomeFirstResponder]; 
} 
+0

Я пробовал их, но не работал; однако это дало мне представление попробовать что-то еще, что было успешным. Я сделал класс UIWindow для обмена мнениями в методе shortMe следующим образом: [appDelegate.window exchangeSubviewAtIndex: 0 withSubviewAtIndex: 1]; \t \t \t \t [appDelegate.tabBarController.view становитсяFirstResponder]; За исключением того, что это привело к другой проблеме, когда элементы UIButton в строке состояния не будут отвечать на включение/выключение. Проводя для этого отдельный вопрос. –