2009-12-16 2 views
1

를 제거? 당신이 UISearchBar를 활성화 할 때 소스 테이블보기를 통해 애니메이션을 투명 검은 색 오버레이를 제거하려면 어떻게 투명 오버레이 UISearchBar

당신은 어떻게 든 책임있는 UIView에 도착하고 0으로 알파입니다 설정할 수 있습니까?

또는 검은 색 오버레이의 상단에 빈 searchResultsTableView를 표시하는 방법은 무엇입니까?

+0

더 명확히하기 위해. 사용자가 검색을 시작하기 전에 searchResultsTableView (searchResults를 표시하기 위해 searchDisplayController가 제어하는 ​​tableview)를 표시하는 방법이 있습니까? 또는 searchDisplayController가 원래의 datasource tableview 위에 그려주는 검은 색 오버레이를 숨길 수있는 방법이 있습니까? – billabel

답변

0

항상는 검색에서 어떤 결과가 아직없는 경우에도, 일부 세포를 표시합니다. 이 작업은 일반적인 UITableViewDelegate/UITableViewDataSource 메서드를 통해 수행 할 수 있습니다. 원래 테이블 뷰, 검색 테이블 뷰 및 더미 셀이 포함 된 검색 테이블 뷰를 다루기 때문에 조심하십시오. 모든 UITableViewDelegate/UITableViewDataSource 메서드는이를 인식하고 있어야합니다.

+0

UISearchDisplayControllerDelegate.searchResultsTableView를 처음로드 할 때 다른 데이터 소스로 설정하려면 어떻게해야합니까? 그리고 누군가 검색을 시작할 때 searchResults 데이터 소스로 전환합니까? – billabel

+0

만약 내가 너라면, 나는 같은 데이터 소스를 사용하고 if ([filteredListContent count] == ​​0)를 체크한다. 그렇다면 일부 빈 셀 (tableView 높이/행 높이) 섹션 당 행 수, 1 섹션을 반환하고 선택한 행을 선택 취소하십시오. – refulgentis

+0

사실 이제는 설명서를 보았으므로 UISearchBar의 텍스트를 변경하는 방법이 없으므로 이것이 유일한 방법 일 수 있습니다. – refulgentis

6
po [self.view subviews] 

(id) $1 = 0x0a3155f0 <__NSArrayM 0xa3155f0>(
<ATShadowTableView: 0xc341600; baseClass = UITableView; frame = (0 44; 320 411); clipsToBounds = YES; gestureRecognizers = <NSArray: 0xa627200>; layer = <CALayer: 0xa626d30>; contentOffset: {0, 0}>, 
<UISearchBar: 0xa618f40; frame = (0 0; 320 44); text = ''; layer = <CALayer: 0xa619040>>, 
<UIControl: 0xa329fc0; frame = (0 44; 320 455); alpha = 0.8; opaque = NO; animations = { opacity=<CABasicAnimation: 0xa32b4e0>; }; layer = <CALayer: 0xa32a060>> 
) 

셀프 뷰의 마지막 객체 (UIControl)는 제거하려는 객체입니다. 그래서

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller 
{ 
... 
    [self performSelector:@selector(removeOverlay) withObject:nil afterDelay:.01f]; 
} 

- (void)removeOverlay 
{ 
    [[self.view.subviews lastObject] removeFromSuperview]; 
} 
+1

이것은 여전히 ​​iOS 7에서 작동하지만, 이제는 'UIControl' 대신'UISearchDisplayControllerContainerView '인 것처럼 보입니다. 또한이 답변에서 오버레이가'-searchDisplayControllerDidBeginSearch'에 나타나지만 매우 짧은 지연 후에'-searchDisplayControllerWillBeginSearch'에서 제거해야한다는 점을 분명히하기 위해 추가하고 싶습니다. '-searchDisplayControllerDidBeginSearch'에서 그것을 제거하면 오버레이가 다시 사라지기 전에 잠시 나타납니다. – iMaddin

+1

나는 이것이 iOS7에서 실제로 작동하지 않는다는 것에 동의하지 않습니다. 실제로 오버레이가 사라지지만 검색 막대 텍스트가 더 이상 변경되지 않으면 표보기가 다시로드되지 않습니다. –

+1

iOS7에서 iOS7에서이 기능을 사용할 수있었습니다. [[self.view.subviews lastObject] setHidden : YES]; [[self.view.subviews lastObject] setHidden : 아니요]; 적절한 시간에 . – Rammeln