2015-09-06 3 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. Я продолжал пытаться добавить navigationItem на TNViewController вместо TNPViewController.

Это правильный способ, и он работает.

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

Смежные вопросы