【问题标题】:UIToolbar items not showingUIToolbar 项目未显示
【发布时间】:2010-11-24 02:54:38
【问题描述】:

我有一个 UINavigationController,它被推送到一个 DetailsViewController。在这个 DetailsViewController 中,我想使用每个 UINavigationController 附带的工具栏(至少,从 iPhone OS3.0 开始)。

因此,在 DetailsViewController 的 viewDidLoad 中,我创建了一个 UIBarButtonItem,我将它添加到一个数组中并将其交给导航控制器:

- (void) viewDidLoad {
    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(selectTemplate)];  
    NSArray *items = [NSArray arrayWithObject: item];

    TestUIAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    UINavigationController *navController = delegate.navigationController;

    [navController setToolbarItems: items animated:NO];     
    [navController setToolbarHidden: NO animated: YES]; 
}

但是,由于某种原因,当 UIToolbar 在屏幕上显示动画时,该项目并未添加到工具栏中。

是否需要使用 UIToolbar 完成某种特定的顺序才能使其正常工作?

P.S.:应用程序处于(强制)横向模式,并且 navigationController.view 上有一个旋转变换。会不会跟这个有关系?

【问题讨论】:

    标签: iphone cocoa-touch uinavigationcontroller uitoolbar


    【解决方案1】:

    进行了更多的挖掘和调试,我得出的结论是,我尝试修改 navigationController 的方法是错误的。相反,我应该简单地设置 DetailsViewController 的 toolbarItems 属性。

    之后,我的代码运行良好:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
            UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemBookmarks target:self action:@selector(selectTemplate)];
    
            NSArray *myToolbarItems = [[NSArray alloc] initWithObjects: item, nil];         
            [self setToolbarItems: myToolbarItems];
            [myToolbarItems release];
    
        }
        return self;
    }
    

    【讨论】:

    • 简短评论 - UIBarButtonItem 分配看起来会被泄露。您可能应该将其设置为自动释放。
    • 哦,对了。但是 NSArray 保留了它,所以我可以在将它添加到数组之后释放 item ,对吗?
    • 我在这个cos上做了一个-1,因为你所做的让你可以为那个视图控制器显示它,它不会在导航的整个生命周期中跟随所有后续视图控制器......这是最工具栏是不会做的。
    • 正是我想要的。 @Jann - 如果每个视图有不同的工具栏按钮怎么办?如果你这样做了,那么这正是你想要的,动态设置工具栏项的代码。
    • “它不会在导航的整个生命周期中跟随所有后续视图控制器......这是大多数工具栏不会做的事情。”我不同意,詹恩。 Interface Builder 中添加的工具栏项目不会通过推送到导航控制器的屏幕保留。因此,没有理由假设以编程方式添加的项目应该如此。
    猜你喜欢
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多