我正在寻找一种方法,让UITableViewController在顶部有一个UITableView,一个UIPickerView在下面(有修复位置)。
我找到了一个用以下代码修复选择器的解决方案:
- (void)viewDidLoad {
[super viewDidLoad];
_picker = [[UIPickerView alloc] initWithFrame:CGRectZero];
_picker.showsSelectionIndicator = YES;
_picker.dataSource = self;
_picker.delegate = self;
// Add the picker to the superview so that it will be fixed
[self.navigationController.view addSubview:_picker];
CGRect pickerFrame = _picker.frame;
pickerFrame.origin.y = self.tableView.frame.size.height - 29 - pickerFrame.size.height;
_picker.frame = pickerFrame;
CGRect tableViewFrame = self.tableView.frame;
tableViewFrame.size.height = 215;
self.tableView.frame = tableViewFrame;
[_picker release];
}
问题在于tableview,似乎调整大小不起作用,所以我看不到所有结果。
感谢您的建议。
答案 0 :(得分:5)
如果要管理的视图由多个子视图组成,其中一个是表视图,则应使用UIViewController
子类而不是UITableViewController
来管理表视图。您可以添加UITableView
子视图,并使控制器实施UITableViewDelegate
和UITableViewDataSource
协议。
UITableViewController
类的默认行为是使表格视图填充导航栏和标签栏之间的屏幕(如果存在)。
来自Table View Programming Guide for iOS:
注意:您应该使用 UIViewController子类而不是 UITableViewController的子类 如果视图是管理表视图 托管由多个组成 子视图,其中一个是表 视图。的默认行为 UITableViewController类是要做的 表格视图填充屏幕之间 导航栏和标签栏(如果 要么就在场。)
如果你决定 请使用UIViewController子类 而不是一个子类 UITableViewController来管理一个 表视图,你应该执行一个 上面提到的几项任务 符合人机界面 准则。清除任何选择 表格视图显示之前, 实现viewWillAppear:方法 清除所选行(如果有) 调用deselectRowAtIndexPath:animated:。 在表视图之后 显示,你应该闪烁滚动 通过发送一个查看滚动指示器 flashScrollIndicators消息给 表格视图;你可以这样做 覆盖viewDidAppear:方法 UIViewController。