2017-03-09 4 views
0

UISearchController이 내 UITableView 바로 위에 있고 내 테이블에 많은 recrods가 있습니다. 사용자가 테이블의 아래쪽으로 이동하면 검색 창을보기 위해 맨 위로 돌아와야합니다.UITableView에서 UISearchController 표시 아래로 스크롤

- (void) showSearchBar { 
    _searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 

    self.searchController.searchResultsUpdater = self; 
    self.searchController.searchBar.placeholder = nil; 
    [self.searchController.searchBar sizeToFit]; 
    self.tableView.tableHeaderView = self.searchController.searchBar; 
    //self.sharedNavigationItem.titleView = _searchController.searchBar; 

    self.searchController.delegate = self; 
    self.searchController.dimsBackgroundDuringPresentation = NO; // default is YES 
    self.searchController.searchBar.delegate = self; // so we can monitor text changes + others 
     self.definesPresentationContext = YES; 
    _searchController.hidesNavigationBarDuringPresentation = NO; 

} 

가 나는 테이블에 (가서) 아래로 스크롤 나는 (아래로 이동)를 스크롤 할 때 그것을 다시 숨길 때 검색 창을 표시하는 방법에 대해 궁금 해서요 : 당신은 내가 검색 창을 만드는 방법을 볼 수 아래 나는 심지어 탁자 밑에있다. 당신은 상단에있는 헤더 숙박을하는 경우

답변

0

검색 표시 줄은 UI에 임의로 배치 할 수 있습니다. 테이블 위의 예를 들어 테이블 위에 배치 된 형제 뷰를 만듭니다. 그보기 44px 및 콘센트 뷰와 제약 모두를 제공하기 위해 초기 설정 높이 제한 ... 지금

@property(weak,nonatomic) IBOutlet UIView *searchBarContainerView; 
@property(weak,nonatomic) IBOutlet NSLayoutConstraint *searchBarHeightConstraint; 

주세요, 당신의 설정 코드 변경 :

// ... 
self.searchBarHeightConstraint.constant = self.searchController.searchBar.bounds.size.height; 
[self.searchBarContainerView addSubview:self.searchController.searchBar]; 
// ... 
0

, 다음 검색 필드는

UITableViewStylePlain 볼 유지해야 평범 테이블보기를. 모든 섹션 머리글이나 바닥 글은 인라인 구분 기호로 표시되며 테이블보기가 스크롤 될 때 유동적으로 나타납니다.

UITableViewStyleGrouped : 섹션에 고유 한 행 그룹이있는 테이블보기입니다. 섹션 머리글과 바닥 글은 뜨지 않습니다.

+0

. 그래서 OP는 스타일을 일반으로 설정하고 섹션 0 헤더에 검색 창을 배치 할 수 있다고 생각하십니까? 이 접근법은 다른 테이블 동작을 제약한다는 점을 지적해야하지만 (예 : OP가 섹션 헤더에 다른 것을 원하거나 다른 헤더를 부동 상태로두기를 원하지 않음) 반드시 알아 두어야합니다. – danh

+0

사용자가 정의 할 수 있습니다 그것은 오직 선택된 테이블에만 적용되며, 모든 사람들에게 적용 할 필요는 없습니다. –

0

내가 당신을 도우려고 나가 한 무슨을로 밖으로, 당신을 돕는 는다는 것을 희망하십시오. 이것은 테이블 뷰의 헤더보기에 내 레이블을 추가 한 방법이며 검색 컨트롤러로 대체하려고했습니다.

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
     CGRect frame = CGRectMake(0, 0, tableView.frame.size.width, 40); 
     UIView *view = [[UIView alloc] initWithFrame:frame]; 
     view.backgroundColor = [UIColor clearColor]; 
     view.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
     _searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
     self.searchController.searchResultsUpdater = self; 
     self.searchController.searchBar.placeholder = nil; 
     [self.searchController.searchBar sizeToFit]; 
     [view addSubview:_searchController]; 
     view.tag = 123; 
     return view; 
} 

드래그를 끝낼 때 효과를 숨기려면 아래 방법을 사용하십시오.

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
        withVelocity:(CGPoint)velocity 
      targetContentOffset:(inout CGPoint *)targetContentOffset{ 
    if (velocity.y > 0){ 
    NSLog(@"up"); 
    [self.view viewWithTag:123].hidden = true; 
} 
if (velocity.y < 0){ 
    NSLog(@"down"); 
    [self.view viewWithTag:123].hidden = false; 
} 

그리고 법 아래에있는 tableview 사용을 스크롤 즉시 변경

: 나는 몇 가지 새로운 답을 생각 약간의 검색 후

-(void)scrollViewDidScroll:(UIScrollView *)scrollView //working delegate 
{ 
    if ([scrollView.panGestureRecognizer translationInView:scrollView].y > 0) { 
     NSLog(@"down"); 
     [self.view viewWithTag:123].hidden = false; 
    } else { 
     NSLog(@"up"); 
     [self.view viewWithTag:123].hidden = true; 
    } 
} 
0

, 그것은 당신이 도움이되기를 바랍니다!

는 스크롤의 방향을 확인하려면 :

BOOL showSearch; 

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
if ([scrollView.panGestureRecognizer translationInView:scrollView].y > 0) { 
     // down 
     showSearch = true; 
    } else { 
     // up 
     showSearch = false; 
    } 
} 

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
        withVelocity:(CGPoint)velocity 
      targetContentOffset:(inout CGPoint *)targetContentOffset{ 
    if (showSearch) { 
     [self addSearch]; 
    } 
    else { 
     [self removeSearch]; 
    } 
    [_tableView reloadData]; 
} 

는 & 제거 SearchController를 추가하려면이 좋은 정보가

-(void)addSearch {  
    if (!_searchController){ 

    _searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 

    _searchController.searchResultsUpdater = self; 
    [_searchController.searchBar sizeToFit]; 
    _tableView.tableHeaderView = _searchController.searchBar; 

    _searchController.delegate = self; 
    _searchController.dimsBackgroundDuringPresentation = NO; 

    self.definesPresentationContext = YES; 
    _searchController.active = NO; 

    _searchController.searchResultsUpdater = self; 
    _searchController.dimsBackgroundDuringPresentation = NO; 
    self.definesPresentationContext = YES; 
    _tableView.tableHeaderView = _searchController.searchBar; 

    _searchController.searchBar.delegate = self; 
    } 
} 

-(void)removeSearch { 
    _searchController.active = NO; 
    [_searchController removeFromParentViewController]; 
    _searchController = nil; 
    _tableView.tableHeaderView = nil; 
}