UIBarButtonItems无法从一个工具栏中删除并添加到另一个工具栏?

时间:2012-07-22 12:00:18

标签: objective-c ios uisplitviewcontroller uibarbuttonitem

我有一个UISplitViewController。我有多个详细信息视图。详细视图包含工具栏。我想在工具栏之间移动UISplitViewControllerDelegate提供的UIBarButtonItem。

所以我保存了对UIBarButtonItem的引用,当我交换视图时,我将其从当前详细信息视图中删除并将其移动到新的详细信息视图。

UIBarButtonItem只运行一次。如果我从UISplitViewController详细信息窗格中的视图控制器A开始,该项目将显示在工具栏中。当我切换到视图控制器B时,我可以看到正在删除和添加的项目占用了空间,但它从未在新工具栏中显示。

每次我想将它添加到新工具栏时,我都可以通过复制UIBarButtonItem来解决这个问题。我真的只想使用保存的值。

发生了什么事?

代码

我的app委托也是我的UISplitViewControllerDelegate。我的所有细节视图也符合UISplitViewControllerDelegate。

// Save
- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc
{
    /* Omitted code that calls the same method on the current detail view. */
    // Save the item
    self.savedBarButtonItem = barButtonItem;
}

我的app代理中有一个IBAction:

-(IBAction)changeDetailView:(id)sender
{
    /* omitted code to the the new view controller and the current view controller */
    [currentView removeBarButtonItem];

    //This adds the item but the item does not even show up.
    [newView addBarButtonItem:self.savedBarButtonItem];

    // New item with the same target and action works.
    UIBarButtonItem * newItem = 
        [[UIBarButtonItem alloc] initWithTitle:@"Test" style:UIBarButtonItemStyleBordered target:self.savedBarButtonItem.target action:self.savedBarButtonItem.action];
    [newView addBarButtonItem:newItem];

}

我在详细视图控制器中添加和删除UIBarButtonItems的方式:

-(void)addBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    NSArray * items = self.toolbar.items;
    NSMutableArray * newArr = [NSMutableArray arrayWithCapacity:[items count]+1];
    [newArr addObject:barButtonItem];
    for(NSObject * o in items)
        [newArr addObject:o];
    [self.toolbar setItems:newArr animated:YES];
}

-(void)removeBarButtonItem
{
    NSArray * items = self.toolbar.items;
    NSMutableArray * newArr = [NSMutableArray arrayWithCapacity:[items count]-1];
    for(NSInteger i=1; i<[items count]; i++)
        [newArr addObject:[items objectAtIndex:i]];
    [self.toolbar setItems:newArr animated:YES];
}

1 个答案:

答案 0 :(得分:1)

我怀疑这个问题是由于在remove方法中使用了动画。工具栏最有可能保持对旧时数组的引用,同时将它们设置为视图之外的动画。所以我建议你尝试将动画更改为删除中的NO,并查看是否修复了它。也许在两者中尝试。如果它起作用那么这个理论是正确的。

您从未提及此项目是否使用了customView,这可能更成问题。