UITabBarControllerDelegate сравнить значение viewController - PullRequest
1 голос
/ 02 мая 2010

У меня есть вкладка с 4 вкладками, и я хочу выполнить какое-то действие, когда выбрана конкретная вкладка, поэтому я раскомментировал UITabBarControllerDelegate в xxAppDelegate.m

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

// Optional UITabBarControllerDelegate method
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

    NSLog(@"%@", viewController);
}

Консоль должным образом регистрировала любой выбранный контроллер, который был выбран, но в этом конкретном формате:

<MyViewController: 0x3b12950>

Так вот, я не ожидал квадратных скобок, ни двоеточия, ни хекса. Поэтому мой вопрос заключается в том, как мне отформатировать утверждение IF? Я думал, что это сработает, но об ошибке упоминается ниже.

// Optional UITabBarControllerDelegate method
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

    NSLog(@"%@", viewController);
    if (viewController == MyViewController)
    {
    //do something nice here …
    };
}

... Ошибка «Ожидаемое выражение перед MyViewController»

Кто-нибудь знает, как мне это делать?

Ответы [ 3 ]

2 голосов
/ 02 мая 2010

Вам необходимо сравнить с конкретным экземпляром контроллера представления. Например, если оператор if должен быть истинным при выборе второй вкладки:

if (viewController == [tabBarController.viewControllers objectAtIndex:1]) {
    // ...
}
0 голосов
/ 21 октября 2010

При сравнении tabbarcontroller используйте self, как это:

if (viewController == [self.tabBarController.viewControllers objectAtIndex:1]) {
    // ...
}

Это удалит предупреждение.

0 голосов
/ 02 мая 2010

Спасибо, что сработало. Я думаю, вы должны знать, с каким объектом вы сначала сравниваете.

Для всех, кто читает это, работающий код работает, однако вы должны быть осторожны, чтобы текст «tabBarController» в примере ссылался на переменную экземпляра (глобальную).

Чтобы ваш код работал, ваш контроллер представления должен ссылаться на локальную версию с уникальным именем следующим образом. Сравните это с моим исходным кодом.

// Optional UITabBarControllerDelegate method
- (void)tabBarController:(UITabBarController *)tabBarController_local didSelectViewController:(UIViewController *)viewController 
{
//...
}

Надеюсь, это поможет кому-то, столкнувшемуся с

Local declaration of 'tabBarController' hides instance variable 

предупреждение при попытке реализовать.

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