3

アプリが最初にポートレートモードで起動されたときにポップオーバーを表示し、ポップオーバーが表示される前にボタンを押す必要があります。私は、Googleや他のStackOverflowスレッドのようなものを通してソリューションを見つけようとしましたが、私はそれを理解することができませんでした。したがって、XCodeで作成された標準のSplitViewサンプルが異なる場合は、以下のコードを記述します。私はそれがこのアプリケーションで動作させることができる場合、私はそれを理解し、それを他の場所に適用できることを望んでいると思っています。UIPopoverをプログラムで表示させることはできません

私は、ボタンが押されたときに呼び出されるものを呼び出すことを考えました...しかし、何が呼び出され、どこが宣言されているのかわかりません...私は基本的なものを見落としているように感じます。私はバナナを運転している!

DetailViewコントローラ DetailViewController.h

#import <UIKit/UIKit.h> 

@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate> { 

UIPopoverController *popoverController; 
UIToolbar *toolbar; 

id detailItem; 
UILabel *detailDescriptionLabel; 
} 

@property (nonatomic, retain) IBOutlet UIToolbar *toolbar; 

@property (nonatomic, retain) id detailItem; 
@property (nonatomic, retain) IBOutlet UILabel *detailDescriptionLabel; 

@end 

DetailViewController.m

#import "DetailViewController.h" 
#import "RootViewController.h" 


@interface DetailViewController() 
@property (nonatomic, retain) UIPopoverController *popoverController; 
- (void)configureView; 
@end 



@implementation DetailViewController 

@synthesize toolbar, popoverController, detailItem, detailDescriptionLabel; 

#pragma mark - 
#pragma mark Managing the detail item 

/* 
When setting the detail item, update the view and dismiss the popover controller if    it's showing. 
*/ 
- (void)setDetailItem:(id)newDetailItem { 
    if (detailItem != newDetailItem) { 
     [detailItem release]; 
     detailItem = [newDetailItem retain]; 

     // Update the view. 
     [self configureView]; 
    } 

    if (self.popoverController != nil) { 
     [self.popoverController dismissPopoverAnimated:YES]; 
    }   
} 


- (void)configureView { 
    // Update the user interface for the detail item. 
    detailDescriptionLabel.text = [detailItem description]; 
} 


#pragma mark - 
#pragma mark Split view support 

- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc { 

barButtonItem.title = @"Root List"; 
NSMutableArray *items = [[toolbar items] mutableCopy]; 
[items insertObject:barButtonItem atIndex:0]; 
[toolbar setItems:items animated:YES]; 
[items release]; 
self.popoverController = pc; 
} 


// Called when the view is shown again in the split view, invalidating the button and popover controller. 
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem { 

NSMutableArray *items = [[toolbar items] mutableCopy]; 
[items removeObjectAtIndex:0]; 
[toolbar setItems:items animated:YES]; 
[items release]; 
self.popoverController = nil; 
} 


#pragma mark - 
#pragma mark Rotation support 

// Ensure that the view controller supports rotation and that the split view can therefore show in both portrait and landscape. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return YES; 
} 


#pragma mark - 
#pragma mark View lifecycle 

/* 
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
[super viewDidLoad]; 
} 
*/ 

/* 
- (void)viewWillAppear:(BOOL)animated { 
[super viewWillAppear:animated]; 
} 
*/ 
/* 
- (void)viewDidAppear:(BOOL)animated { 
[super viewDidAppear:animated]; 
} 
*/ 
/* 
- (void)viewWillDisappear:(BOOL)animated { 
[super viewWillDisappear:animated]; 
} 
*/ 
/* 
- (void)viewDidDisappear:(BOOL)animated { 
[super viewDidDisappear:animated]; 
} 
*/ 

- (void)viewDidUnload { 
// Release any retained subviews of the main view. 
// e.g. self.myOutlet = nil; 
self.popoverController = nil; 
} 


#pragma mark - 
#pragma mark Memory management 

/* 
- (void)didReceiveMemoryWarning { 
// Releases the view if it doesn't have a superview. 
[super didReceiveMemoryWarning]; 

// Release any cached data, images, etc that aren't in use. 
} 
*/ 

- (void)dealloc { 
[popoverController release]; 
[toolbar release]; 

[detailItem release]; 
[detailDescriptionLabel release]; 
[super dealloc]; 
} 

@end 

rootviewは、典型的なのUITableViewControllerで、特別なものではありませんが、あなたが必要とするいくつかの理由であれば(ビューをロードするかなり退屈です)この問題を把握するのに役立つ私は問題はありませんそれらも投稿しています。繰り返しますが、XcodeがiPad用の分割ビューを作成したいと言ったときにXcodeが生成する内容はまっすぐですが、変更していません。

私が見落としていると私は私の頭を打つようになり、 "私はそれを逃したとは思わないことができます!ご協力いただきありがとうございます。

答えて

3

それを実感してください!

私はviewDidLoadメソッドで

[self.popoverController presentPopoverFromBarButtonItem:[[toolbar items] objectAtIndex:0] permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

を置きます。私はそれがかなりシンプルなものであることを知っていた!何の問題もなく動作するようです!

関連する問題