2009-08-10 73 views
7

Tôi có một bộ điều khiển UITabBar quản lý một số bộ điều khiển (sử dụng SDK 3.0). Một trong số đó là một bộ điều khiển tableView và tôi cần cung cấp khả năng tìm kiếm bằng UISearchDisplayController. Tất cả mã của tôi dựa trên ví dụ về Apple TableSearch. Tuy nhiên, khi nhấp vào tab, bộ điều khiển tableView xuất hiện hiển thị nội dung liên quan của nó, nhưng không có thanh tìm kiếm nào xuất hiện. Tôi đã kiểm tra xib trong IB để đảm bảo rằng tất cả các cửa hàng được thiết lập đúng, nhưng không có vấn đề gì tôi cố gắng self.searchDisplayController luôn luôn là nil và thanh tìm kiếm không xuất hiện.Làm thế nào để sử dụng UISearchDisplayController từ bộ điều khiển trong bộ điều khiển UITabBar?

Trong thực tế tôi đã nhân rộng MainView.xib từ ví dụ TableSearch và đặt lớp chủ sở hữu của tệp thành đúng lớp bộ điều khiển cho tab. Các cửa hàng được đặt như trong ví dụ MainView.xib. Tôi có bỏ lỡ bất kỳ bước quan trọng nào hoặc làm điều gì sai?

Cảm ơn bạn trước.

Trả lời

1

Ok, tôi đã tìm thấy cách giải quyết nó. Trong trường hợp của tôi, vấn đề là do thực tế rằng tôi đã sử dụng một bộ điều khiển nhúng trong UITabBarController như một trong các tab được quản lý của nó (tức là khi còn nhỏ).

Xóa bộ điều khiển khỏi UITabBarController, sau đó thêm UINavigationController vào UITabBarController thay vào đó, và cuối cùng đặt bộ điều khiển của tôi làm con của UINavigationController đã giải quyết hoàn toàn sự cố.

Tôi không hiểu tại sao điều này là như vậy (không có thông tin liên quan trong tài liệu, như thường xảy ra); tuy nhiên, nó bây giờ hoạt động như một sự quyến rũ. Với loại liên quan.

+0

Điều này vẫn hoạt động vào tháng 11 năm 2017. Có một sơ đồ tốt cho thấy cách thêm UINavigationController vào trang tab [ở đây] (https://stackoverflow.com/a/37357242/1359088). –

1

tôi cũng có vấn đề này :(là thanh tìm kiếm bị ẩn đằng sau tableview?

@unforgiven, bạn đã thử này ...?

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

này bằng tay tạo ra một thanh tìm kiếm và Nhưng tôi đang làm một số sai lầm ngu ngốc trong IB rằng SearchBar không hiển thị mặc dù kết nối của tôi là hoàn hảo. :-(

Làm cập nhật bài đăng này nếu bạn nhận được câu trả lời ...

1

Tôi đã có một vấn đề tương tự

Để giải quyết tôi phải làm một bước bổ sung để unforgivens trả lời Trong nib chính của tôi

1) tạo ra một UITabController 2) Sau đó, tôi kéo ra khỏi một điều khiển UINavigational vào điều khiển tab 3) Sau đó kéo ra một UITableViewController vào NavigationalController như một đứa trẻ 4) Sau đó thay đổi (3) lớp là MyTableWithSearchBarViewController của tôi trong thanh tra - kiểm tra xem tên nib là chính xác và thay đổi điều này nếu cần thiết trong thanh tra như tốt 5) Sau đó tôi đã phải xóa tableView được tạo tự động bởi IB ở bước (3). Chỉ khi đó sẽ show thanh tìm kiếm một cách chính xác ...

Nếu ở bước 3 tôi kéo ra khỏi một bộ điều khiển khác nhau lên sân khấu hoặc trái tableView đó nó sẽ chỉ bao giờ hiển thị bảng và không phải là thanh tìm kiếm

lạ

5

Tôi gặp vấn đề tương tự và tình cờ gặp phải giải pháp này ...

Nếu bạn có bộ điều khiển xem bảng (ví dụ: UISearchDisplayController) được lồng trong Thanh tab hoặc Bộ điều khiển điều hướng bằng Trình tạo giao diện, bạn cần đặt "Tên Nib" trong cửa sổ "Thuộc tính thanh tra".

Tên Nib sẽ là tên giữ chế độ xem bảng và có bộ điều khiển (ví dụ: UISearchDisplayController) làm Chủ sở hữu tệp.

1

Tomtrapeze có câu trả lời đúng nếu tệp nib của bạn chứa UITableViewController. Tuy nhiên, nếu bạn đang tải UITableViewController trong mã - chẳng hạn như đẩy nó trên ngăn xếp của một UINavigationController - giải pháp là một chút khác nhau.

Khi khởi tạo UITableViewController hoặc lớp con, bạn cần sử dụng -initWithNibName: bundle: biểu mẫu của trình khởi tạo và chỉ định tên tệp nib của bạn. Ngoài ra, bạn có thể sử dụng tiêu chuẩn -initWithStyle: initializer và tự thiết lập thuộc tính nibName trước khi khung nhìn được nạp.

Nếu thuộc tính nibName không được đặt khi chế độ xem được tải, UITableViewController sẽ không sử dụng logic tra cứu nib UIViewController bình thường. Nó sẽ chỉ tải một UITableView tiêu chuẩn thay thế.

0

Một sửa chữa có thể làm việc cho tôi là để init UITableViewController với initWithNibName: bó:

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

Để tổ UITableViewController trong một UINavigationController trước khi đặt nó trong một UITabBarController không khắc phục vấn đề đối với tôi. ..

1

Gần đây tôi đã học được rằng tôi có thể tải các tệp NIB với [[MyViewController alloc] initWithNibName:nil bundle:nil]; khi tệp NIB có cùng tên với lớp (ví dụ: MyViewController.xib). Nó chỉ ra rằng khởi tạo theo cách này làm cho 'UISearchBar and UISearchBarDisplayController` không hiển thị. Khi tôi khởi tạo bộ điều khiển xem bằng cách thực sự gõ tên của lớp, thanh tìm kiếm của tôi hiển thị chính xác. Ban đầu tôi nghĩ nó có liên quan đến cách tôi trình bày bộ điều khiển xem nhưng rất vui vì nó không phải.

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

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

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

Điều này đang sử dụng iOS SDK 5.1 và XCode 4.3.1.

+0

Có, mọi thứ giờ tốt hơn nhiều, với SDK 5.1. –

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