UITabBarController временно пропускает заголовок и изображение элемента в More Navigation Controller - PullRequest
1 голос
/ 02 марта 2012

"Это с тобой когда-нибудь случалось?"

(Примечание: ниже приведен код, дружественный к ARC, следовательно, нет вызова autorelease или пар retain / release.)

#pragma mark - UIViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    // "We interrupt this designated initializer to go do our own thing ..."
    return [self init];
}

#pragma mark - NSObject

- (id)init {
    // Why hello there, superclass designated initializer.
    if ((self = [super initWithNibName:@"YourNibHere" bundle:nil])) {

        // We're in a nav controller, so set the title.
        self.navigationItem.title = @"Item Title";

        // "Someone set up us the tab bar!"
        [self setTabBarItem:[[UITabBarItem alloc] initWithTitle:@"Item Title" image:[UIImage imageNamed:@"itemIcon.png"] tag:itemTag]];
    }
    return self;
}

Итак ... это верхний UIViewController в UINavigationController , который, в свою очередь, находится в UITabBarController по некоторому индексу. Классические turducken контроллеров представления Какао, если хотите.

Вы касаетесь элемента панели вкладок, контекст меняется на верхнюю часть UIViewController , и жизнь прекрасна.

А, а что если вы хотите программно переключиться на это с контроллера представления с другим индексом (панель вкладок)?

Кажется, достаточно просто. Просто используйте -selectedViewController: и передайте UINavigationController ( not UIViewController ), на который вы хотите переключиться. «В основном безвредный».

Это работает каждый раз ... за исключением того, что я сталкиваюсь с действительно раздражающей причудой всякий раз, когда UINavigationController спрятан под печально известным Больше контроллером навигации (используется iOS, когда есть больше пять элементов панели вкладок в игре).

Причудка? Когда я нажимаю кнопку «Назад» («Дополнительно»), чтобы выскочить UIViewController (он больше не является верхним из-за опции sitch, y'see), imageView и textLabel в ячейке табличного представления идентифицирующее этот элемент панели вкладок отсутствует ! Как в не там. Просто пустая клетка.

Если я прокручиваю ячейку табличного представления за пределами экрана и снова включаю ее, или иным образом перемещаюсь от и к дополнительному навигационному контроллеру, затем появляется. : (

Что случилось? Пытливые умы хотят знать ...

1 Ответ

0 голосов
/ 09 октября 2012

Я исправил это. Это не красиво, но это что-то.

Расширение UITabBarController:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.moreNavigationController.delegate = self;
}

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

    //Fix for not showing the selected item in the tableview.
    if ([navigationController.topViewController isKindOfClass:NSClassFromString(@"UIMoreListController")]) {
        [navigationController.topViewController.view.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

            if ([obj isKindOfClass:[UITableView class]]) {
            *stop = YES;
                UITableView *tableView = (UITableView *)obj;
                [tableView reloadData];
            }
        }];
    }
}

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

...