iPhone: 탐색 모음이 있는 모달 UITableView 컨트롤러 표시
저는 모달 뷰를 보여주고 있습니다.UITableViewController클래스. 왠지 내비게이션 바를 보여줄 때 표시되지 않습니다.내 코드는 다음과 같습니다.
SettingsCreateAccount *detailViewController = [[SettingsCreateAccount alloc] initWithStyle:UITableViewStyleGrouped];
detailViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
detailViewController.navigationController.navigationBarHidden = NO;
[self.navigationController presentModalViewController:detailViewController animated:YES];
detailViewController = nil;
[detailViewController release];
나는 그것이 기본적으로 표시되는 줄 알았어요.만약 도움이 된다면, 저는 이것을 또한 다른 수업에서 부르고 있습니다.UITableViewController에 의해 관리되는UINavigationController아이디어?
모달 뷰 컨트롤러를 표시할 때 기존 탐색 컨트롤러나 탐색 막대를 사용하지 않습니다.탐색 모음을 표시하는 것만 원하는 경우 탐색 모음을 모달 보기의 하위 보기로 추가하고 수행 중인 대로 표시해야 합니다.
탐색 기능이 있는 모달 뷰 컨트롤러를 표시하려면 다음과 같이 상세 뷰 컨트롤러가 포함된 모달 네비게이션 컨트롤러를 표시해야 합니다.
SettingsCreateAccount *detailViewController = [[SettingsCreateAccount alloc] initWithStyle:UITableViewStyleGrouped];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
[detailViewController release];
navController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:navController animated:YES];
[navController release];
모달 컨트롤러가 자체 탐색 스택을 관리합니다.
Apple의 스토리보드 튜토리얼에서 제안하는 스토리보드를 사용하는 사용자를 위한 탐색 모음을 표시하는 한 가지 방법이 있습니다.
모달 뷰 컨트롤러는 탐색 스택에 추가되지 않으므로 테이블 뷰 컨트롤러의 탐색 컨트롤러에서 탐색 막대를 가져오지 않습니다.형식적으로 표시될 때 뷰 컨트롤러에 탐색 막대를 제공하려면 해당 탐색 컨트롤러에 내장합니다.
- 개요 보기에서 보기 컨트롤러를 선택합니다.
- 뷰 컨트롤러를 선택한 상태에서 Editor > Embed In > Navigation Controller를 선택합니다.
iOS 7에서 모달 뷰 컨트롤러의 탐색 모음에서 제목과 일부 버튼을 표시하기를 원하십니까?UITableView 컨트롤러에서 이 마법을 사용해 보십시오.
// in the .h
@property (strong) UINavigationBar* navigationBar;
//in the .m
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title = @"Awesome";
self.navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectZero];
[self.view addSubview:_navigationBar];
[self.navigationBar pushNavigationItem:self.navigationItem animated:NO];
}
-(void)layoutNavigationBar{
self.navigationBar.frame = CGRectMake(0, self.tableView.contentOffset.y, self.tableView.frame.size.width, self.topLayoutGuide.length + 44);
self.tableView.contentInset = UIEdgeInsetsMake(self.navigationBar.frame.size.height, 0, 0, 0);
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
//no need to call super
[self layoutNavigationBar];
}
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
[self layoutNavigationBar];
}
승인된 솔루션이 스토리보드와 함께 프로젝트에서 어떻게 사용될 수 있는지 공유하고자 합니다.
간단한 접근 방식은 형식적으로 표시될 VC 앞에 스토리보드 빈 탐색 컨트롤러를 배치하여 관계를 다음과 같이 표시하는 것입니다.
(프레젠터 VC) -> presents modally -> (내비게이션 컨트롤러에 루트로 표시할 컨트롤러가 있음)
우리는 한동안 이 접근 방식을 시도해 보았는데, 우리의 스토리보드가 내비게이션 바와 함께 형식적으로 제공되기를 원하는 다른 컨트롤러의 하나! 프레젠테이션에만 사용될 때 많은 수의 중간 내비게이션 컨트롤러에 의해 "오염"된다는 것을 알게 되었습니다.
현재 솔루션은 승인된 답변에서 사용자 지정 segue로 코드를 캡슐화하는 것입니다.
#import "ModalPresentationWithNavigationBarSegue.h"
@implementation ModalPresentationWithNavigationBarSegue
- (void)perform {
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self.destinationViewController];
[self.sourceViewController presentViewController:navigationController animated:YES completion:nil];
}
@end
프로젝트에 이 세그가 있으므로 스토리보드에 더 이상 중간 탐색 컨트롤러를 만들지 않고 이 모달 프레젠테이션을 사용합니다.다음과 같은 Navigation BarSegue 사용:
발표자 VC --> 발표자 VC
저는 이 답변이 앱 스토리보드에서 불필요한 중복을 피하기를 좋아하는 사람들에게 도움이 되기를 바랍니다.
저는 단지 @Scott가 말한 것에 무언가를 추가하고 싶었습니다.그의 대답은 확실히 스토리보드, iOS 7 및 8... (그리고 곧 9)에서 현재 가장 쉽고 가장 많이 받아들여지는 방법입니다.
스토리보드에 뷰 컨트롤러를 확실히 추가하고 @Scott의 설명에 따라 내장하는 것이 올바른 방법입니다.
그런 다음 소스 뷰 컨트롤러에서 대상(모델적으로 표시할 대상)으로 제어 끌어서 세그를 추가하면 세그 유형에 대한 선택사항과 함께 작은 뷰가 나타나면 "Present Modally"를 선택합니다.이름을 지정하는 것도 좋습니다(아래 예에서는 "presentMyModalViewController"를 사용합니다).
제가 놓친 한 가지는 @Scott의 경우에는 내비게이션 컨트롤러에 내장된 양식으로 표시된 뷰 컨트롤러에 데이터를 전달하고 싶을 때입니다.
segue.destinationViewController를 잡으면 UINavigationController에 내장한 컨트롤러가 아닌 UINavigationController가 됩니다.
탐색 컨트롤러에 내장된 보기 컨트롤러를 사용하기 위해 다음과 같이 작업했습니다.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"presentMyModalViewController"]) {
// This could be collapsed, but it's a little easier to see
// what's going on written out this way.
// First get the destination view controller, which will be a UINavigationController
UINavigationController *nvc = (UINavigationController *)segue.destinationViewController;
// To get the view controller we're interested in, grab the navigation controller's "topViewController" property
MyModalViewController *vc = (EmailReceiptViewController *)[nvc topViewController];
// Now that we have the reference to our view controller, we can set its properties here:
vc.myAwesomeProperty = @"awesome!";
}
}
이것이 도움이 되길 바랍니다!
만약 당신이 단지 필요하다면.NavigationBar의인턴를추수있다니습의 할 수 .UINavigationBarBarItems를 할당합니다.
언급URL : https://stackoverflow.com/questions/4600448/iphone-show-modal-uitableviewcontroller-with-navigation-bar
'programing' 카테고리의 다른 글
| @font-face가 woff 파일에 404 오류를 던지는 이유는 무엇입니까? (0) | 2023.07.29 |
|---|---|
| mariadb FROM_UNIXTIME 미래 시간 제한 (0) | 2023.07.29 |
| 텍스트를 CSS로 대체하려면 어떻게 해야 합니까? (0) | 2023.07.29 |
| 인수를 위한 밑줄이 있는 파이썬의 람다? (0) | 2023.07.29 |
| PHP 오류:함수 이름은 문자열이어야 합니다. (0) | 2023.07.29 |