몇 가지 작업을 수행 한 후에 제대로 표시되는 팝업 뷰를 사용자 정의 uiview에 표시합니다. Popover 뷰 바깥을 탭하면 예상대로 해제되지만, 그 안의 버튼이 눌러지면 해고하고 싶습니다. 저와 도울 수있는 사람이 있습니까? 간결한 가이드 찾기에 고심.Popover 뷰를 올바르게 설정 해제하는 방법
6
A
답변
12
수동으로 팝업을 닫으려면 해당 참조를 유지해야합니다. popover를 보여주는보기 컨트롤러에있는 것이 좋습니다.
콘텐츠 뷰 컨트롤러 내의 단추가 popover를 해제하기 위해 원래의보기 컨트롤러 (popover를 제시 한)에게 알리려면 가능한 두 가지 방법이 delegate + protocol 또는 NSNotificationCenter입니다.
아래 예제 코드는 NSNotificationCenter입니다. 팝 오버 ("PresenterViewController")을 제공 뷰 컨트롤러 .H에서
상기 popoverViewController 대한 속성을 추가@interface PresenterViewController : UIViewController {
...
UIPopoverController *popoverController;
}
...
@property (nonatomic, retain) UIPopoverController *popoverController;
@end
을 PresenterViewController의하는 .m에서 :
@synthesize popoverController;
...
- (void)showPopover
{
if (self.popoverController == nil)
{
ContentFooViewController *content =
[[ContentFooViewController alloc] init];
UIPopoverController *popover = [[UIPopoverController alloc]
initWithContentViewController:content];
[content release];
self.popoverController = popover;
[popover release];
// Listen for the "done" notification which will be posted
// by the button in the content view controller.
// When the notification is received,
// call the contentFooViewControllerDone: method...
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(contentFooViewControllerDone:)
name:@"contentFooViewControllerDone"
object:popoverController.contentViewController];
}
[self.popoverController presentPopoverFromRect:...
// OR
[self.popoverController presentPopoverFromBarButtonItem:...
}
- (void)contentFooViewControllerDone:(NSNotification *)notification
{
// Button in content view controller was tapped, dismiss popover...
[self.popoverController dismissPopoverAnimated:YES];
}
- (void)dealloc
{
//stop listening for notifications and release popoverController...
[[NSNotificationCenter defaultCenter] removeObserver:self];
[popoverController release];
[super dealloc];
}
콘텐츠보기 컨트롤러에서 다음과 같이 버튼 누르기 방법을 구현합니다.
- (IBAction)dismissButtonTapped
{
[[NSNotificationCenter defaultCenter]
postNotificationName:@"contentFooViewControllerDone" object:self];
}
관련 문제
- 1. 테이블에서 항목을 비롯하여 세션을 설정 해제하는 방법
- 2. 뷰를 올바르게 제거하고 서브 뷰를 추가하십시오.
- 3. popover 컨트롤러에서 modalview를 호출하는 방법
- 4. 서브 뷰를 제거하여 더 많은 메모리를 해제하는 방법
- 5. popover rotation
- 6. CGPoint에서 Popover
- 7. MVVM에서 뷰를 올바르게 테스트하려면 어떻게합니까?
- 8. Objective C에서 개체를 올바르게 선언하고 해제하는 위치
- 9. 오디오를 올바르게 해제하는 방법은 무엇입니까? [AVAudioPlayer]
- 10. 버퍼를 올바르게 참조 해제하는 방법은 무엇입니까?
- 11. iPhone - 설정 번들의 PSTextFieldSpecifier를 올바르게 정렬하는 방법
- 12. 와일드 카드로 $ _SESSION을 해제하는 방법
- 13. 아이폰에 presentModelViewController 스택을 해제하는 방법?
- 14. 오버플로 설정 : 올바르게 숨김
- 15. PHP에서 세션을 설정 해제하는 방법 Javascript를 사용 하시겠습니까?
- 16. 요소가 비활성화/활성화 될 때 유효성 검사를 설정/해제하는 방법
- 17. PHP : 응용 프로그램의 모든 클래스를 파괴/설정 해제하는 방법
- 18. 닫기 popover - Objective-c
- 19. Popover 내의 버튼에서보기 변경
- 20. 웹 응용 프로그램을 해제하는 방법?
- 21. 표현식에서 부분 뷰를 올바르게 사용하는 방법은 무엇입니까?
- 22. 디자인에 따라 뷰를 올바르게 정렬하는 방법은 무엇입니까?
- 23. 폴더 반전을 해제하는 방법
- 24. Sys.WebForms.PageRequestManagerParserErrorException을 해제하는 방법
- 25. SlimDX에서 프로젝트를 해제하는 방법
- 26. 개체를 콜백에서 해제하는 방법?
- 27. 강제로 UITableViewCell을 해제하는 방법
- 28. 프로세스의 리소스를 해제하는 방법
- 29. 이 개체를 해제하는 방법?
- 30. NSString을 해제하는 방법?
이 접근법에주의 할 점은 당신이 그것의 외부를 두드려서 popover를 닫는 것입니다, 당신이 여전히 그것에 대한 참조를 가지고 있기 때문에 그것은 결코 적절히 해산되지 않을 것입니다. 여분의 뷰 컨트롤러를 유지하는 데 신경 쓰지 않는다면 괜찮습니다.하지만 일반적으로 메모리는 프리미엄이며 사용자는이를 원하지 않습니다. 그래서, 당신은 또한'- (void) popoverControllerDidDismissPopover : (UIPopoverController *) popoverController'를 사용하여 속성을 nil로 설정해야합니다. – memmons
@ 하크 : 좋은 지적, 고마워. – Anna
이것은 대단한 것입니다. 다른 사람들은 애플이 단순히 팝 오버를 닫기 위해 버튼을 놓는 것을 꺼리는 것을 또한 지적합니다. 응용 프로그램에서 해당 버튼을 사용하여 다른 작업을 수행 할 가능성이 있습니다. :) – ekinnear