Проблема с NSNotification & Увольнение модальных контроллеров представления - PullRequest
0 голосов
/ 26 июля 2011

Итак, у меня есть tabbarcontroller, и я передаю уведомление на dismissModalViewController при касании определенного tabBarItem.

Работает хорошо, и модальный View Controller закрывается. Но я хочу изменить его особым образом, и он не работает, как я ожидаю ...

Наблюдатель инициализирован до публикации уведомления. Это вкладка BarItems -

NSArray *viewControllerss = [[NSArray alloc] initWithObjects: myProfileDataViewController, 
sampleViewController,reminderInfoViewController, nil];


[self.tabBarContr setViewControllers:viewControllerss animated:YES];
self.tabBarContr.selectedIndex = 2;

Я отправляю уведомление о viewWillAppear из sampleViewController, и когда я выбираю этот tabBarIcon, он отклоняет TabBarController.

НО я хочу, чтобы sampleViewController был слева от большинства UITabBar.

И вот я добавляю это как

 NSArray *viewControllerss = [[NSArray alloc] initWithObjects: sampleViewController,
 myProfileDataViewController, reminderInfoViewController, nil];

ЭТО НЕ ОТКЛЮЧАЕТ КОНТРОЛЛЕР TAB-БАР.

Примечание: Пожалуйста, смотрите порядок инициализации NSArray.

Уведомление публикуется в viewWillAppear of sampleViewController` и наблюдателе в соответствующем контроллере вида, который представляет модальный контроллер вида

1 Ответ

0 голосов
/ 26 июля 2011

Не могли бы вы поставить NSLog прямо перед отправкой уведомления?

Проверьте, есть ли у вас какие-либо результаты при загрузке приложения.

РЕДАКТИРОВАТЬ: добавление в ответ на основе вашего ответа

В вашем sampleViewController вы можете попробовать это:

Настройте его в соответствии с UITabBarControllerDelegate.Ваш интерфейс класса sampleViewController должен выглядеть примерно так:

@interface SampleViewController : UIViewController <UITabBarControllerDelegate>

Затем в .m вашего sampleViewController в viewDidLoad установите делегата в качестве sampleViewController (в данном случае self)

-(void) viewDidLoad
{   
    [super viewDidLoad];

    // Assuming you have a reference to your tabBarController somewhere

    [self setDelegate:self]; // try this line or the line below
    // [[self tabBarController] setDelegate:self];

    // The rest of your drawing code here
}

Теперь реализуйте метод делегата где-нибудь внутри файла sampleViewController .m.

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    // I've included this to see if this method actually gets called or not.
    NSLog(@"Dismissing modal view controller");

    // check to make sure sampleViewController tab was pressed by checking 
    // the class type of the viewController parameter being passed in

    if ([viewController isKindOfClass:[SampleViewController class]]  
    {
        // I assume you have a pointer reference to that modal view controller 
        // you want to dismiss
        [self dismissModalViewController:theUnwantedViewController animated:YES];
    }


}

Проверьте, работает ли он.

...