ipad - 在弹出窗口中更改颜色导航 Controller

标签 ipad uinavigationcontroller uipopovercontroller

我在尝试更改 popoverController 中导航 Controller 的颜色时遇到问题。
我正在尝试做这样的事情:

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

但它不起作用。有什么建议?

最佳答案

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

//////////// **解决方案** ////////

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

我要编辑这篇文章,因为我解决了我的问题,我认为在这里分享我的解决方案可能会有所帮助:

首先 ,请遵循以下示例:

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

好吧!!!就这样!如果有人需要帮助,请告诉我。
最好的祝愿!

关于ipad - 在弹出窗口中更改颜色导航 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8490261/

相关文章:

ipad - iPad HTML音频检测 `load`

ios - UICollectionView - 在横向模式下重新设计

iOS 在两个导航 Controller 之间切换

ios6 - 导航栏设置背景图像在 ios6 中不起作用

ipad - 将 uipopovercontroller 的箭头放置在 mapkit 上的注释点

objective-c - 如何使 UIPopoverController 在旋转后保持相同的位置?

cocoa-touch - UISplitViewController 中的 UIPopOverController

ios - 在新 iPad 上,我们如何使用 Retina 显示屏提供的新的更高分辨率进行绘图?

iphone - 如何控制推送通知中按钮的作用?

ios - 不使用导航 Controller 时弹出 View Controller ?