将子视图添加到不滚动的tableview

时间:2011-09-11 17:18:37

标签: iphone ios uiviewcontroller uitableview

我正在使用UITableViewController并希望添加搜索栏。

我的选项为[self.tableview addSubview:searchBar]self.tableview.tableHeaderView = searchBar 这两个选项都会沿着tableview的其余部分滚动搜索栏,我理解。但有没有办法锁定元素,而不是使用UIViewController或更改滚动框架原点? 我正在考虑一种方法来超越当前的视图层次结构并在其上添加子视图。

我尝试了相反的方法,将视图添加到superview并将其带到前面

[[self.tableView superview] addSubview:searchBar]; [[self.tableView superview] bringSubviewToFront:searchBar]; }

但它不起作用。

1 个答案:

答案 0 :(得分:4)

UITableViewControllers UIViewControllers的主视图属性为UITableView。因此,UITableView确实占据了所有屏幕。

您正在寻找的方法是使用标准UITableViewController,其标准为UIView,并将UISearchBarUITableView作为子视图添加到其中IB。

要做到这一点,只需:

  • 更改视图控制器的类,改为提及它符合tableview相关协议:将@interface UITableViewController更改为@interface UIViewController <UITableViewDelegate, UITableViewDataSource>
  • 在头文件中添加@property(nonatomic, retain) IBOutlet UITableView* tableView属性,并在实现中添加关联的@synthesize tableView;语句。不要忘记在nil中将此属性设置回self.tableView = nildealloc)以获得良好的记忆管理
  • 将InterfaceBuilder中的UITableView实例链接到此新创建的IBOutlet。

因此你仍然有一个UITableView,但这不是占用你所有屏幕的主视图;相反,你可以像你想要的那样布局你的tableView,并使它只占用你的屏幕的一部分,并将UISearchBar放在它上面。

另一种方法是使用UISearchDisplayController来管理您的UISearchBar。