如何从UINavigationController中以编程方式添加第二个UITableView
我意识到这是一个热门话题,我已经在这里搜索了很多帖子,但没有发现任何有助于我的问题的东西。我是一个初学者,为什么它的价值(正如你会看到我的问题:-)如何从UINavigationController中以编程方式添加第二个UITableView
我的应用程序有一个标签栏3项。第一个加载一个UINavigationController,它打算有3个“屏幕”向下钻取(第一个:UITableView,第二个:已过滤的UITableView,第三个:UIView)。在我的生活中,我无法弄清楚如何以编程方式在第二个屏幕上显示UITableView。
因为我没有使用IB,所以我优先于- (void)loadView
。在不同的时间,我已经试过了诸如:
- (void)loadView
{
[super loadView];
// first option (thought for sure this would work)
[[self view] addSubview:secondTableView];
// another...
[self tableView:secondTableView];
// another...
[[[[self navigationController] topLevelController] view] addSubview:secondTableController];
}
我有表视图设置正确与它的委托和数据源,我只是无法弄清楚如何展现这该死的东西。第二个控制器也继承自UITableViewController。此外,我不知道如何说“在导航标题和标签栏菜单内适合此表格视图”。我正在使用CGRectMake()来猜测尺寸,但它似乎应该有一个更好的方法(也许这就是为什么你使用IB :-)。无论哪种方式,即使首先出现某种东西,这也是次要的。
在此先感谢您的任何建议。
如果你从UITableViewController继承,你的视图应该是一个UITableView而不是一个普通的UIView,那么当你想以编程的方式创建一个视图时,你应该分配它,初始化它,设置它的属性并将它作为控制器的视图,我之前没有尝试[super loadView],但是它为您创建tableView并将dataSource和delegate分配给self,所以您不必这样做。所以它应该像有关视图层次建立这一
- (void)loadView {
UITableView *tempPointer = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) andStyle:UITableViewStylePlain];
self.view = tempPointer; // controller retains view property so we should release it
[tempPointer release];
// If you want your view to be resized automatically (to fit)
self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
self.tableView.dataSource = self;
self.tableView.delegate = self;
//...
}
或
- (void)loadView {
[super loadView];
self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
secondTableView = self.tableView; // or change your code to cope with self.tableView instead of secondTableView...
//...
}
清除出一定的不确定性,保留等有关双方的UIViewController和UITableViewController中的文档中,如果你还没有准备好。
谢谢!我不知道'autoresizingMask'也很有用。 – rpheath 2010-11-10 13:57:11