UIToolbar项目未显示

NSS*_*Sec 14 iphone cocoa-touch uitoolbar uinavigationcontroller

我有一个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]; 
}
Run Code Online (Sandbox Code Playgroud)

但是,出于某种原因,当UIToolbar动画到屏幕上时,该项目不会添加到工具栏中.

是否有某种特定的顺序需要使用UIToolbar完成这项工作?

PS:应用程序处于(强制)横向模式,navigationController.view对其进行了旋转变换.这与它有什么关系吗?

NSS*_*Sec 37

已经做了一些挖掘和调试,我得出结论,我尝试修改的方法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;
}
Run Code Online (Sandbox Code Playgroud)

  • "它并没有跟随所有后续的视图控制器通过导航的生命......大多数工具栏都不会这样做." 我不同意,Jann.Interface Builder中添加的工具栏项不会通过推入导航控制器的屏幕持续存在.因此,没有理由假设以编程方式添加的项目应该. (4认同)