2015-09-06 54 views
3

当我尝试显示一个刷新按钮作为rightBarButtonItem时,我有一个奇怪的问题。RightBarButtonItem只显示为不活动

总之,我已经实现了它,但运行应用程序时看不到任何东西。但是,当我点击故事板Debug --> View Debugging --> Capture View Hierarchy。我可以看到一个看起来无效且隐藏的刷新按钮。我不知道为什么。

enter image description here

的viewcontrol通过自定义pageviewcontroller实际上推入。

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 

    self.pageController.dataSource = self; 
    [[self.pageController view] setFrame:[[self view] bounds]]; 

    TNViewController *initialViewController = [self viewControllerAtIndex:currentIndex]; 
    UIBarButtonItem *refreshButton = [[UIBarButtonItem alloc] 
             initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh 
             target:self action:@selector(refreshClicked:)]; 
    initialViewController.navigationItem.rightBarButtonItem = refreshButton; 
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:initialViewController]; 

    NSArray *viewControllers = [NSArray arrayWithObject:navigationController]; 

    [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

    [self addChildViewController:self.pageController]; 
    [[self view] addSubview:[self.pageController view]]; 
    [self.pageController didMoveToParentViewController:self]; 

    for (UIView *subview in self.pageController.view.subviews) { 
     if ([subview isKindOfClass:[UIPageControl class]]) { 
      UIPageControl *pageControl = (UIPageControl *)subview; 
      pageControl.pageIndicatorTintColor = [UIColor blackColor]; 
      pageControl.currentPageIndicatorTintColor = [utils colorFromHexString:@"#AA3635"]; 
      pageControl.numberOfPages = _news.count; 
      pageControl.backgroundColor = [UIColor whiteColor]; 
     } 
    } 
    self.edgesForExtendedLayout = UIRectEdgeTop; 
} 

我错过了什么?

回答

0

我终于找到了问题。在这种情况下非常令人困惑的是,实际的TNViewcontroller被包装在TNPViewController中。后者是PageViewController。我一直试图在TNViewController而不是TNPViewController上添加navigationItem。

这是正确的方法,它的工作原理。

ParentViewController:

TNPViewController *tnp = [[TNPViewController alloc] initWithNews:news index:indexPath.row]; 
[[self navigationController] pushViewController:tnp animated:YES]; 

TNPViewController:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UIBarButtonItem *refreshButton = [[UIBarButtonItem alloc] 
             initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh 
             target:self action:@selector(refreshClicked:)]; 
    self.navigationItem.rightBarButtonItem = refreshButton; 
} 
1

因为您将它添加到uiviewcontroller,您需要创建一个UINavigationBar,一个UINavigationItem和UIButton。然后添加在UIButton的到UINavigationItem,然后UINavigationItem添加到UINavigationBar的:

_navBar = [[UINavigationBar alloc] init]; 
[_navBar setFrame:CGRectMake(0,0,self.view.bounds.size.width,52)]; 
[self.view addSubview:_navBar]; 
UINavigationItem *navItem = [[UINavigationItem alloc]initWithTitle:@""]; 
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshClicked:)]; 
[navItem setLeftBarButtonItem:barButton]; 

[_navBar setItems:@[navItem]]; 

此代码来了,答案在这里找到:

adding barButtonItems to a UINavigationBar without a Navigation Controller

希望这有助于。

+0

但我利用在首位右一个UINavigationController?为什么我应该手动添加这些?我仍然没有任何运气给它一枪。 – Houman

0

您是否尝试在实例化UINavigation控制器后添加它?

+0

我想你还不能评论,因为你太新了。新来者的Stackoverflow的常见尴尬。在你的回答中你没有指定我必须实例化UINavigation Controller。请问我错过了什么?随意编辑主要答案,我会看到它。 – Houman