【问题标题】:RightBarButtonItem shows only as inactiveRightBarButtonItem 仅显示为非活动状态
【发布时间】:2015-09-06 22:27:48
【问题描述】:

在尝试将刷新按钮显示为 rightBarButtonItem 时,我遇到了一个奇怪的问题。

简而言之,我已经实现了它,但是在运行应用程序时什么都看不到。但是,当我单击情节提要Debug --> View Debugging --> Capture View Hierarchy 时。我可以看到一个似乎不活动且隐藏的刷新按钮。我不知道为什么。

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;
}

请问我错过了什么?

【问题讨论】:

    标签: ios uinavigationbar rightbarbuttonitem


    【解决方案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

    希望这会有所帮助。

    【讨论】:

    • 但我首先使用的是 UINavigationController 对吧?为什么要手动添加这些?我还是试了试,没有运气。
    【解决方案2】:

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

    【讨论】:

    • 我猜你还不能评论,因为你太新了。 Stackoverflow 对新手来说通常很尴尬。在您的回答中,您没有指定我必须实例化 UINavigation Controller。请问我错过了什么?随意编辑主要答案,我会看到的。
    【解决方案3】:

    我终于找到了问题所在。在这种情况下非常令人困惑的是,实际的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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 2022-10-13
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多