navigationItem没有显示在popoverController上

时间:2011-09-13 04:05:58

标签: ios4 uinavigationcontroller uipopovercontroller

导航栏无法显示,在UITableView中工作正常,但在popoverController内失败

在UIViewController

中启动popover popoverController
-(IBAction) btnShowMovies:(id) sender {

    if (self.popoverController == nil) {

        teamAController *movies = 
        [[teamAController alloc] 
         initWithNibName:@"teamAController" 
         bundle:[NSBundle mainBundle]]; 

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

        popover.delegate = self;
        [movies release];

        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:UIPopoverArrowDirectionDown 
     animated:YES];
}

teamAController.h

@interface teamAController : UIViewController <UITableViewDataSource, UITableViewDelegate> {        
    UITableView *tableView;
    NSArray *theArray;
}    
@property (nonatomic, retain) NSArray *theArray;
@property (nonatomic, retain) IBOutlet UITableView *tableView;

-(void) createArray;

teamAController.m

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.title= @"FooBarExtreme";    
    self.contentSizeForViewInPopover = CGSizeMake(250.0, 300.0);        
    [self createArray];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
}

一切正常,我有可爱的桌子与图像等,正确的大小和放置popover只是没有标题栏.....?

1 个答案:

答案 0 :(得分:0)

我按照http://mobiforge.com/designing/story/using-popoverview-ipad-app-development上的教程找到了解决方案/问题。

值得注意的是,我发现这是使用UIButtons中的uiNavigationBar元素创建uiPopoverController时最全面的一个。

问题是popover本身属于调用它的视图。内容源自您加载到其中的xlib /视图。但不是标题栏。您可以在父视图视图中调用它。

此代码位于主视图中,并从UIButton

调用
// BookMarksViewController is the class that contains the code/xib for the popover's content
// Of overarching importance is creating it as a UITableViewController

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

    // Here's the rub: because in effect this view is controlling the popover
    // we have to assign nav bar stuff here. Sigh.
    bookMarksViewController.navigationItem.title = @"Territories";
    UINavigationController *navController = 
    [[UINavigationController alloc] 
     initWithRootViewController:bookMarksViewController];

    bookMarksViewController.contentSizeForViewInPopover = CGSizeMake(320, 400);

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

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

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

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

[self.popoverController presentPopoverFromRect:sourceRect 
inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];