Uitabbar 컨트롤러 내의 컨트롤러에서 uisearchDisplayController를 사용하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1257724

문제

여러 컨트롤러를 관리하는 Uitabbar 컨트롤러가 있습니다 (SDK 3.0 사용). 이 중 하나는 TableView 컨트롤러이며 UISearchDisplayController를 사용하여 검색 기능을 제공해야합니다. 내 모든 코드는 Apple Tablesearch 예제를 기반으로합니다. 그러나 탭을 클릭하면 TableView 컨트롤러가 관련 컨텐츠를 표시하는 것처럼 보이지만 SearchBar는 나타나지 않습니다. IB의 XIB를 확인하여 모든 매장이 올바르게 설정되어 있는지 확인했지만 Self.SearchDisplayController는 항상 NIL이며 검색 창은 나타나지 않습니다.

실제로 Tablesearch 예제에서 mainView.xib를 복제하고 파일의 소유자 클래스를 탭의 올바른 컨트롤러 클래스로 설정했습니다. 매장은 예제 MainView.xib에서와 같이 설정됩니다. 중요한 단계를 놓치거나 뭔가 잘못하고 있습니까?

미리 감사드립니다.

도움이 되었습니까?

해결책 3

좋아, 나는 그것을 해결하는 방법을 찾았다. 제 경우에는 문제가 UitabbarController 내에 포함 된 컨트롤러를 관리 탭 중 하나 (즉, 어린이로서)로 사용하고 있다는 사실 때문입니다.

UitabbarController에서 컨트롤러를 제거한 다음 UITABBARCONTROLLER에 UinaVigationController를 추가하고 결국 UinaVigationController의 자식으로 내 컨트롤러를 배치하면 문제가 완전히 해결되었습니다.

나는 이것이 왜 그렇게되는지 이해하지 못한다 (종종 문서에 관련 정보가 없다). 그러나 이제는 매력처럼 작동합니다. 친절한 안부.

다른 팁

나는 같은 문제가 있었고이 해결책을 우연히 발견했습니다 ...

테이블 뷰 컨트롤러가있는 경우 (예 : UISearchDisplayController) 인터페이스 빌더를 사용하여 탭 막대 또는 내비게이션 컨트롤러에 중첩되면 "Attributes Inspector"창에서 "NIB 이름"을 설정해야합니다.

NIB 이름은 테이블 뷰를 보유하고 컨트롤러가있는 이름입니다 (예 :. UISearchDisplayController) 파일의 소유자로서.

나도이 문제가 있습니다 :( 검색 바가 테이블 뷰 뒤에 숨겨져 있습니까?

@Unforgiven, 이거 해보 셨나요 ...?

searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; 
[self.tableView setTableHeaderView: searchBar];

이것은 수동으로 SearchBar를 생성하고 작동합니다. 그러나 나는 IB에서 내 연결이 완벽하지만 SearchBar가 나타나지 않는다는 어리석은 실수를하고 있습니다. :-(

답변을 받으면이 게시물을 업데이트하십시오 ...

비슷한 문제가있었습니다

해결하기 위해서는 Main NIB에서 orpgivens 답변을 위해 추가 단계를 한 단계 더해야했습니다.

1) UITABCONTROLLER 만들기 2) 그런 다음 UinaVigational 컨트롤러를 탭 컨트롤러로 끌어 냈다. NIB 이름은 정확하고 검사관에서 필요한 경우 이것을 변경합니다. 그래야만 검색 바가 올바르게 표시 될 것입니다 ...

3 단계에서 다른 컨트롤러를 스테이지로 끌어 올리거나 테이블 뷰를 떠난 경우 검색 표시 줄이 아닌 테이블 만 표시됩니다.

기이한

NIB 파일에 uitableViewController가 포함 된 경우 TomTrapeze가 정답을 가지고 있습니다. 그러나 UinavigationController의 스택에 밀어 넣는 것과 같이 UitableViewController를 코드로로드하는 경우 솔루션이 약간 다릅니다.

UitableViewController 또는 서브 클래스를 초기화 할 때 -initwithNibname : Bundle : Initializer의 형태를 사용하고 NIB 파일의 이름을 지정해야합니다. 또는 표준 -initwithStyle : Initializer를 사용하고보기가로드되기 전에 Nibname 속성을 수동으로 설정할 수 있습니다.

보기가로드 될 때 Nibname 속성이 설정되지 않으면 UitableViewController는 일반적인 UIViewController NIB 조회 로직을 사용하지 않습니다. 대신 표준 uitable 뷰를로드합니다.

최근에 NIB 파일을로드 할 수 있다는 것을 알게되었습니다. [[MyViewController alloc] initWithNibName:nil bundle:nil]; NIB 파일이 클래스와 동일한 이름을 갖는 경우 (예 : MyViewController.xib). 이 방법을 초기화하는 것은 'UisearchBarandUisearchBardisplayController`가 표시되지 않습니다. 실제로 클래스 이름을 입력하여 View Controller를 초기화하면 검색 창이 올바르게 나타났습니다. 나는 처음에 그것이 뷰 컨트롤러를 제시하는 방법과 관련이 있다고 생각했지만 그렇지 않은 것이 기뻤습니다.

PGWSearchViewController *searchVC = [[PGWSearchViewController alloc] initWithNibName:@"PGWSearchViewController" bundle:nil];

searchVC.modalPresentationStyle = UIModalPresentationFullScreen;
searchVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentViewController:searchVC animated:YES completion:^{ }];

이것은 iOS SDK 5.1 및 Xcode 4.3.1을 사용하고 있습니다.

나에게 효과가있는 또 다른 수정 사항은 InitwithNibname : Bundle을 사용하여 UitableViewController를 시작하는 것입니다.

SearchEntryTableViewController* searchEntryTableViewController = [[SearchEntryTableViewController alloc]initWithNibName:@"SearchEntryTableViewController" bundle:nil];

UITABBARCONTROLLER에 넣기 전에 UINAVIGATIONCOTROLLER의 UITIBLEVIEWCONTROLLER를 중첩하려면 문제가 해결되지 않습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top