UITabBarController暂时缺少更多导航控制器中的项目标题和图像

时间:2012-03-02 16:38:23

标签: ios ios4 uiviewcontroller uitabbarcontroller uitabbaritem

“这件事发生在你身上吗?”

(注意:以下是适合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;
}

所以...这是 UINavigationController 中的顶级 UIViewController ,而后者又在某个索引的 UITabBarController 中。 Cocoa视图控制器的经典 turducken ,如果你愿意的话。

点击标签栏项,上下文更改为顶部的 UIViewController ,生活很精彩。

啊,但是如果你想在不同的(标签栏)索引下以编程方式从视图控制器切换到这个怎么办?

似乎很容易。只需使用-selectedViewController:并传入要切换到的 UINavigationController UIViewController )。 “大部分都是无害的。”

每次都有效......除非我在更多导航控制器下隐藏 UINavigationController 时遇到一个非常烦人的怪癖(iOS时使用)超过五个标签栏项目。)

怪癖?当我点击后退按钮(“更多”)以弹出 UIViewController (由于更多sitch,y'see而不再是最顶层),imageViewtextLabel在表格视图中标识此标签栏项目的单元格缺少!因为没有。只是一个空单元格。

如果我将表格视图单元格滚动到屏幕上并重新打开,或以其他方式远离并返回到更多导航控制器,则会出现然后。 :(

什么时候发生?询问心灵想知道......

1 个答案:

答案 0 :(得分:0)

我为此做了一个修复。它不漂亮,但它是一些东西。

扩展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];
            }
        }];
    }
}

这样,tableview将在可见时重新加载。你会看到细胞出现在过渡中,但对我来说这不是问题。