3

나는 응용 프로그램이 처음 세로 모드에서 시작됩니다 대신이 숨겨져과 팝 오버가 나타나기 전에 버튼을 누르면하도록 사용자에게 요구되는 때 팝 오버를 표시 할 나타납니다. 나는 구글과 다른 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]; 

을 넣어. 나는 그것이 꽤 간단하다는 것을 알았다! 어떤 문제없이 작동하는 것 같습니다!

관련 문제