2

나는 UISearchDisplayController으로 고심하고 있으며, 누군가 나를 도와 줄 수 있기를 바랍니다.UISearchDisplayController 및 setDisplaysSearchBarInNavigationBar

기본적으로 나는 "검색"버튼이있는 UINavigationBar을 가지고 있습니다. 누군가 "검색"을 탭하면 UISearchDisplayController이 활성화되고 UISearchBar가 UINavigationBar 안에 나타나야합니다. SearchBar 옆에 "Cancel"버튼이 구현되어 SearchDisplayController을 비활성화하고 UINavigationBar을 다시 "검색"버튼으로 재설정합니다.

Default UINavigationBar

내 첫 번째 문제는 내 SearchBar 결과 테이블 또는 SearchDisplayController이 활성화되어있는 동안 회색 오버레이와 사이의 간격이다.

SearchBar activated

두 번째 문제

내가 취소 도청 후 기본 아이콘 (돋보기) 내 rightBarButtonItem를 재설정 할 수 있다는 것입니다. [self.navigationItem setRightBarButtonItem:nil];을 설정하려고해도 "취소"버튼이 남아 있습니다.

after clicking Cancel

여기 내 구현 : OK

- (IBAction)btnSearchClicked:(id)sender { 
[self.navigationController.navigationBar addSubview:self.searchController.searchBar]; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelEditing)]; 

[self.searchController.searchBar setFrame:CGRectMake(0, 0, 250, 44)]; 
[self.searchController setDisplaysSearchBarInNavigationBar:YES]; 
[self.searchController setActive:YES animated:YES]; 
[self.searchController.searchBar becomeFirstResponder]; 
} 

-(void)cancelEditing 
{ 
[self.navigationItem setRightBarButtonItem:nil]; 
[self.searchController setActive:NO animated:YES]; 
[self.searchController.searchBar removeFromSuperview]; 
} 

답변

1

(UI 요소 내 스토리 보드를 통해 추가된다) 나는 두 문제에 대한 해결책을했다.

[self.searchController setDisplaysSearchBarInNavigationBar:YES];은 NavigationBar가 반투명하기 때문에 간격이 발생했기 때문에 반 투명도를 btnSearchClicked에 설정하고 취소 할 때 해제했습니다.

setRightBarButtonItem 속성에 액세스하기 전에 setDisplaysSearchBarInNavigationBarcancelEditing에서 비활성화하여 버튼 문제가 해결되었습니다. 어쩌면 setDisplaysSearchBarInNavigationBar - 옵션이 self.navigationItem에 응답하지 않는 새 NavigationBar를 생성합니다.