我在NavigationController中有一个UIPageViewController,并且由UIPageViewController呈现的ViewController之一需要能够在导航栏中添加“保存”按钮。
问题是我找不到对导航栏的任何访问权限,因此我设置了一个断点并开始对其进行挖掘,而我似乎找不到在哪里可以访问NavigationController或其属性。
这是我发现的:
(lldb) po self.toolbarItems
$9 = 0x00000000 <nil>
(lldb) po self.parentViewController
$10 = 0x1e070bc0 <UIPageViewController: 0x1e070bc0>
(lldb) po self.parentViewController.toolbarItems
$11 = 0x00000000 <nil>
(lldb) po self.parentViewController.navigationController
$12 = 0x00000000 <nil>
(lldb) po self.parentViewController.view
$13 = 0x1d585960 <_UIPageViewControllerContentView: 0x1d585960; frame = (0 0; 320
416); clipsToBounds = YES; opaque = NO; autoresize = W+H; layer = <CALayer:
0x1d5a1090>>
(lldb) po self.parentViewController.view.window
$14 = 0x1e073750 <UIWindow: 0x1e073750; frame = (0 0; 320 480); layer =
<UIWindowLayer: 0x1e0756a0>>
(lldb) po self.parentViewController.view.window.rootViewController
error: property 'rootViewController' not found on object of type 'id'
error: 1 errors parsing expression
(lldb) po self.presentingViewController
$15 = 0x00000000 <nil>
我尝试在我的VC和父VC中设置我的rightBarButtonItem,甚至尝试转到topViewController和rootViewController。
任何人都可以针对我在哪里可以访问NavigationController提出其他建议吗?
最佳答案
您需要将其放在UIViewController子类中
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.parentViewController.navigationItem.rightBarButtonItem = ...
}
该解决方案的唯一问题是Apple可以随时更改UIPageViewController实现,以具有更高级别的视图控制器包含。更安全的解决方案是:
在UIViewController子类.h中添加:
@property (nonatomic, weak) UIPageViewController *pageViewController;
在.m中添加:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
_pageViewController.navigationItem.rightBarButtonItem = ...
}
然后别忘了将pageViewController分配到适当位置的属性
myViewController.pageViewController = myPageViewController;
您可以像这样在UIPageViewControllerDelegate方法中重置UIPageViewController navigationItem的属性:
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
if (completed) {
UIViewController *viewController = [pageViewController.viewControllers lastObject];
if (![viewController isKindOfClass:[CustomBarButtonItemViewController class]]) {
pageViewController.navigationItem.rightBarButtonItem = nil;
}
}
}
关于ios - 找不到添加UIBarButtonItem的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15437458/