在弹出窗口中更改颜色导航控制器

时间:2011-12-13 13:47:25

标签: ipad uinavigationcontroller uipopovercontroller

我在尝试更改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 个答案:

答案 0 :(得分:10)

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

////////////的 ** ** ////////

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

我要编辑这篇文章,因为我解决了我的问题,我认为可以在这里分享我的解决方案:

首先,请点击以下示例:

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

完成后,请转到第二步。

第二步将添加一个新的popoverBackgroundViewClass:

在项目目标类中添加新文件,并将其命名为'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];
}

好的!!!就这样!如果someOne需要帮助,请告诉我。 祝福!

答案 1 :(得分:0)

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
}