change color navigation controller in a popover

后端 未结 2 566
鱼传尺愫
鱼传尺愫 2020-12-03 16:11

I\'m having a problem with trying to change the colour of my navigation controller inside my popoverController.
I\'m trying to do something like this:

if         


        
相关标签:
2条回答
  • 2020-12-03 16:53

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

    ////////////**SOLUTION**////////

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

    I'm gonna edit this post because i solved my problem and I think could be helpful share my solution here:

    first of all, follow this sample:

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

    When It is done go to step two.

    The second step will be add a new popoverBackgroundViewClass:

    Add new file in your project Objective class and call it '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
    

    Third step:

    When It is done add this line in 'PopOverExample1ViewController.m':

    import the new class:

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

    Alright!!! Thats all! If someOne needs help just let me know. Best wishes!

    0 讨论(0)
  • 2020-12-03 17:00
    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)
    

    the color of the button bar

    navigationBar?.barStyle = UIBarStyle.black
    

    the style bar

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

    the color of the bar

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

    image bar

    all the code

    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
    }
    
    0 讨论(0)
提交回复
热议问题