2012-12-04 18 views
5

Tôi muốn thêm một thanh tìm kiếm để một UICollectionViewController, đó là nhúng theo cách sau: (!) UITabBarController> UINavigationbarController> UICollectionViewController> SearchBar Theo quan điểm này, thanh tìm kiếm sẽ thay thế Thanh điều hướng.thêm UISearchBar để UICollectionviewController nhúng vào NavigationController iOS6

Theo thiết kế tương tự, nếu tôi thử nghiệm trên với một UITableViewController, thanh tìm kiếm xuất hiện tốt (cả lập trình và thông qua Storyboard)

Vấn đề là tôi không thể nhận thêm thanh tìm kiếm trên UICollectionViewController khi tôi sử dụng khung StoryBoard; nó chỉ nằm ở giữa tầm nhìn, và tôi không biết làm thế nào để di chuyển nó lên hàng đầu. Ngoài ra, nó luôn xuất hiện bên dưới UICollectionview, vì vậy nó không hiển thị.

Vì vậy, đi theo con đường khác, cách lập trình:

-(void)viewWillAppear:(BOOL)animated{ 
self.searchBarTop = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
[self.searchBarTop setPlaceholder:@"Enter your command here"]; 
self.searchDC = [[UISearchDisplayController alloc]initWithSearchBar:self.searchBarTop contentsController:self]; 
self.searchBarTop.delegate = self; 

[[self navigationController] setNavigationBarHidden:NO animated:animated]; 
[self.navigationController.navigationBar addSubview:self.searchBarTop]; 
} 

Với điều này, thanh tìm kiếm xuất hiện tốt. Nhưng thật không may, khi tôi nhập vào một số văn bản, nó biến mất phía trên chế độ xem - có lẽ vì navBar cơ bản làm như vậy - (không biết tại sao ...)

Tôi không chắc chắn tại sao thanh tìm kiếm lại ổn một UITableViewController, và tại sao nó là một nỗi đau cho một UICollectionViewController. Điều đó nói rằng, bất cứ ai có một đầu mối là tại sao thanh tìm kiếm/navBar biến mất, và làm thế nào tôi có thể sửa lỗi đó?

Bất kỳ giải pháp nào đều được chào đón ..

cảm ơn! -A

Trả lời

8

Thêm tiêu đề và đặt SearchBar trong đó (đó là những gì tôi đã làm trong quá khứ). Điều đó đang được nói, tôi đã nhận được trong thói quen của hầu như không bao giờ sử dụng hoặc là UITableViewController (trừ khi tôi đang thực hiện một StaticCellTableView) hoặc UICollectionViewController. Những gì tôi sẽ đề nghị là để thực hiện một tiêu chuẩn UIViewController và chỉ cần thêm vào của bạn UICollectionView. Kích thước số CollectionView xuống một số và đặt SearchBar ở trên cùng. Điều này cho phép bạn có một số SearchBar luôn được hiển thị (mà người dùng của tôi thường thích hơn là phải cuộn lên trên cùng để thay đổi, chỉnh sửa tìm kiếm)

+1

Cảm ơn! Đó có thể là một giải pháp mà tôi sẽ phải xem xét, tôi đồng ý, vì có vẻ như UICollectionviewController sử dụng 100% chế độ xem. Tôi muốn thanh tìm kiếm ẩn/hiển thị theo yêu cầu, vì vậy navBar cung cấp một cách dễ dàng. Làm tương tự với một UIViewController, trong khi cho phép uicollectionview thay đổi kích cỡ đúng cách sẽ yêu cầu một số làm lại mặc dù. Tôi muốn tránh nó nếu tôi có thể. cho bây giờ. – Alex

+0

Bạn đã thử thêm SearchBar vào chế độ xem tiêu đề chưa? –

+0

Trong tiêu đề không, vì tùy chọn này không phải là những gì tôi đang tìm kiếm (thanh tìm kiếm sẽ cuộn với chế độ xem). Tôi có thể thử khác - UIViewController - mặc dù tôi có xu hướng nghĩ rằng tôi nên phù hợp với UICollectionViewController/UICollectionView cặp. – Alex

8

Tôi sử dụng mã sau để thêm UISearchBar vào UICollectionViewController. Thật không may tôi không thể làm cho UISearchDisplayController làm việc.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.collectionView.frame), 44)]; 
    self.searchBar.autocorrectionType = UITextAutocorrectionTypeNo; 
    self.searchBar.delegate = self; 
    [self.collectionView addSubview:self.searchBar]; 
    [self.collectionView setContentOffset:CGPointMake(0, 44)]; 
} 

- (void) viewWillAppear:(BOOL)animated{ 
    // to show search bar 
    [self.collectionView setContentOffset:CGPointMake(0, 0)]; 
    // to hide search bar 
    [self.collectionView setContentOffset:CGPointMake(0, 44)]; 
} 

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { 
    [searchBar setShowsCancelButton:YES animated:YES]; 
} 

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { 
    [searchBar setText:@""]; 
    [searchBar setShowsCancelButton:NO animated:YES]; 
    [searchBar resignFirstResponder]; 
} 
+0

Hi Eugene, cảm ơn! Trong thực tế, đây là giải pháp của Jay khá nhiều, đó không phải là những gì tôi cần. Trong thời gian tạm thời, tôi đã tìm thấy điều này: http://stackoverflow.com/questions/10617330/uisearchbar-in-uinavigationbar-changes-width-when-rotating-orientation?rq=1, hoạt động tốt cho nhu cầu của tôi. cổ vũ. – Alex

+0

Ngoài phương pháp này, bạn có thể đặt thuộc tính headerReferenceSize của bố cục là CGSizeMake (320.0,44.0) sao cho nội dung sẽ bắt đầu sau điểm 44.0 –

+0

cảm ơn câu trả lời hay – Shashi3456643

Các vấn đề liên quan