14

我有一个 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 是否需要执行某种特定的命令才能使其正常工作?

PS:应用程序处于(强制)横向模式,并且 navigationController.view 上有一个旋转变换。这和它有什么关系吗?

4

1 回答 1

38

做了一些更多的挖掘和调试,我得出的结论是我尝试修改的方法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;
}
于 2009-08-30T10:44:23.953 回答