我有一个 UISplitViewController。我有多个详细视图。详细视图具有工具栏。我想在工具栏之间移动从 UISplitViewControllerDelegate 提供的 UIBarButtonItem 。
所以我保存了对 UIBarButtonItem 的引用,当我交换视图时,我将它从当前详细视图中删除并将其移动到新的详细视图中。
UIBarButtonItem 只工作一次。如果我从 UISplitViewController 详细信息窗格中的视图控制器 A 开始,则该项目将显示在工具栏中。当我切换到视图控制器 B 时,我可以看到该项目被删除和添加,它占用了空间,但它永远不会显示在新工具栏中。
每次我想将它添加到新工具栏时,我都可以通过复制 UIBarButtonItem 来解决这个问题。我真的只想使用保存的值。
这是怎么回事?
代码
我的应用程序委托也是我的 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;
}
我的应用程序委托中有一个 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];
}