изменить цвет контроллера навигации в поповере - PullRequest
5 голосов
/ 13 декабря 2011

У меня проблема с попыткой изменить цвет моего контроллера навигации внутри моего popoverController.
Я пытаюсь сделать что-то вроде этого:

if (self.popoverController == nil) {
    ArtistsViewController *artistsViewController = 
    [[ArtistsViewController alloc]      
     initWithNibName:@"ArtistsViewController" 
     bundle:[NSBundle mainBundle]]; 

    artistsViewController.navigationItem.title = @"Artists";
    UINavigationController *navController = 
    [[UINavigationController alloc] 
     initWithRootViewController:artistsViewController];


    UIPopoverController *popover = 
    [[UIPopoverController alloc] 
     initWithContentViewController:artistsViewController.navigationController];
    artistsViewController.navigationController.navigationBar.tintColor=[UIColor greenColor];

    popover.delegate = self;
    [artistsViewController release];
    [navController release];

    self.popoverController = popover;
    [popover release];
}

[self.popoverController 
 presentPopoverFromBarButtonItem:sender                                    
 permittedArrowDirections:UIPopoverArrowDirectionAny 
 animated:YES];

но это не работает. какие-либо предложения?

Ответы [ 2 ]

10 голосов
/ 14 декабря 2011

////////////////////////////////////////

//////////// ** РЕШЕНИЕ ** ////////

////////////////////////////////////////

Я собираюсь отредактировать этот пост, потому что я решил свою проблему, и я думаю, может быть полезным поделиться своим решением здесь:

прежде всего , следуйте этому примеру:

http://mobiforge.com/designing/story/using-popoverview-ipad-app-development

Когда это будет сделано, перейдите к шагу два.

На втором шаге будет добавлен новый popoverBackgroundViewClass:

Добавьте новый файл в ваш класс Objective и назовите его «CustomPopoverBackgroundView»

///////////////////////////////////////////////
////// CustomPopoverBackgroundView.h  /////////
///////////////////////////////////////////////

     #import < UIKit/UIKit.h >
     #import < UIKit/UIPopoverBackgroundView.h >

    @interface CustomPopoverBackgroundView : UIPopoverBackgroundView{
        UIPopoverArrowDirection direction;
        CGFloat offset;
    }

    @end

//////////////////////////////////////////////
////// CustomPopoverBackgroundView.m /////////
//////////////////////////////////////////////


    #import "CustomPopoverBackgroundView.h"

    @implementation CustomPopoverBackgroundView

     -  (void)layoutSubviews {
        [super layoutSubviews];
        CGFloat fullHeight = self.frame.size.height;
        CGFloat fullWidth = self.frame.size.width;
        CGFloat startingLeft = 0.0;
        CGFloat startingTop = 0.0;
        CGFloat arrowCoord = 0.0;

        UIImage *arrow;
        UIImageView *arrowView;

        switch (self.arrowDirection) {
            case UIPopoverArrowDirectionUp:
                startingTop += 13.0;
                fullHeight -= 13.0;
    //the image line.png will be the corner 
                arrow = [UIImage imageNamed:@"line.png"];
                arrowCoord = (self.frame.size.width / 2) - self.arrowOffset;
                arrowView = [[[UIImageView alloc] initWithFrame:CGRectMake(arrowCoord, 0, 13.0, 13.0)] autorelease];
                break;


            case UIPopoverArrowDirectionDown:
                fullHeight -= 13.0;
                arrow = [UIImage imageNamed:@"line.png"];
                arrowCoord = (self.frame.size.width / 2) - self.arrowOffset;
                arrowView = [[[UIImageView alloc] initWithFrame:CGRectMake(arrowCoord, fullHeight, 13.0, 13.0)] autorelease];
                break;

            case UIPopoverArrowDirectionLeft:
                startingLeft += 13.0;
                fullWidth -= 13.0;
                arrow = [UIImage imageNamed:@"line.png"];
                arrowCoord = (self.frame.size.height / 2) - self.arrowOffset;
                arrowView = [[[UIImageView alloc] initWithFrame:CGRectMake(0, arrowCoord, 13.0, 13.0)] autorelease];
                break;

            case UIPopoverArrowDirectionRight:
                fullWidth -= 13.0;
                arrow = [UIImage imageNamed:@"line.png"];
                arrowCoord = (self.frame.size.height / 2) - self.arrowOffset;
                arrowView = [[[UIImageView alloc] initWithFrame:CGRectMake(self.frame.size.width-13.0, arrowCoord, 13.0, 13.0)] autorelease];
                break;

        }


        //this image will be your background
        UIImage *bg = [[UIImage imageNamed:@"lineBack.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(8.0, 8.0, 8.0, 8.0)];
        UIImageView *imageView = [[[UIImageView alloc] initWithFrame:CGRectMake(startingLeft, startingTop, fullWidth, fullHeight)] autorelease];
        [imageView setImage:bg];
        [arrowView setImage:arrow];
        [self addSubview:imageView];
        [self addSubview:arrowView];
    }



    - (CGFloat) arrowOffset {

        return offset;

    }



    - (void) setArrowOffset:(CGFloat)arrowOffset {

        offset = arrowOffset;

        [self setNeedsLayout];

    }



    - (UIPopoverArrowDirection)arrowDirection {

        return direction;

    }



    - (void)setArrowDirection:(UIPopoverArrowDirection)arrowDirection {

        direction = arrowDirection;

        [self setNeedsLayout];

    }



    + (CGFloat)arrowHeight {

        return 30.0;

    }



    + (CGFloat)arrowBase {

        return 30.0;

    }



    + (UIEdgeInsets)contentViewInsets {

        return UIEdgeInsetsMake(30.0, 30.0, 30.0, 30.0);

    }

    @end

Третий шаг:

Когда это будет сделано, добавьте эту строку в 'PopOverExample1ViewController.m':

импортировать новый класс:

#import " CustomPopoverBackgroundView.h "


-(IBAction) showMovies:(id) sender {

    if (self.popoverController == nil) {
        MoviesViewController *movies = 
            [[MoviesViewController alloc] 
                initWithNibName:@"MoviesViewController" 
                         bundle:[NSBundle mainBundle]]; 

        UIPopoverController *popover = 
            [[UIPopoverController alloc] initWithContentViewController:movies]; 

        popover.delegate = self;
        [movies release];


//THIS IS THE LINE THAT YOU HAVE TO ADD


         popover.popoverBackgroundViewClass=[CustomPopoverBackgroundView class];


        self.popoverController = popover;
        [popover release];
    }

    [self.popoverController 
        presentPopoverFromBarButtonItem:sender 
               permittedArrowDirections:UIPopoverArrowDirectionAny 
                               animated:YES];    
}

-(IBAction) btnShowMovies:(id) sender {

    if (self.popoverController == nil) {
        MoviesViewController *movies = 
            [[MoviesViewController alloc] 
                initWithNibName:@"MoviesViewController" 
                         bundle:[NSBundle mainBundle]]; 

        UIPopoverController *popover = 
            [[UIPopoverController alloc] initWithContentViewController:movies]; 

        popover.delegate = self;
        [movies release];


//THIS IS THE LINE THAT YOU HAVE TO ADD


         popover.popoverBackgroundViewClass=[CustomPopoverBackgroundView class];


        self.popoverController = popover;
        [popover release];
    }

    CGRect popoverRect = [self.view convertRect:[btn frame] 
                                       fromView:[btn superview]];

    popoverRect.size.width = MIN(popoverRect.size.width, 100); 
    [self.popoverController 
        presentPopoverFromRect:popoverRect 
                        inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionAny 
                      animated:YES];
}

Хорошо !!! Это все! Если кому-то понадобится помощь, просто дайте мне знать. С наилучшими пожеланиями!

0 голосов
/ 28 марта 2017
override func viewDidAppear(_animated: Bool){
let navigationBar = self.navigationController?.navigationBar
navigationBar?.tintColor = UIColor(colorLiteralRed: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)

цвет панели кнопок

navigationBar?.barStyle = UIBarStyle.black

стиль бара

navigationBar?.barTintColor = UIColor(colorLiteralRed: 0.89, green: 0.55, blue: 0.69, alpha: 1.0)

цвет бара

let imageView(frame: CGRect(x: 0, y: 0, width: 250, height: 80))
imageView.contentMode = .scaleAspectFit
}

панель изображений

весь код

override func viewDidAppear(_animated: Bool) {
         let navigationBar = self.navigationController?.navigationBar
         navigationBar?.tintColor = UIColor(colorLiteralRed: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
         navigationBar?.barStyle = UIBarStyle.black
         navigationBar?.barTintColor = UIColor(colorLiteralRed: 0.89, green: 0.55, blue: 0.69, alpha: 1.0)
         let imageView(frame: CGRect(x: 0, y: 0, width: 250, height: 80))
         imageView.contentMode = .scaleAspectFit
}
...