如何从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中的文档中,如果你还没有准备好。

+0

谢谢!我不知道'autoresizingMask'也很有用。 – rpheath 2010-11-10 13:57:11

你尝试过:

[Self.navigationController pushViewController:secondTableView]; 

希望这会有所帮助,如果不是你可以给多一点的描述的情况。

+0

谢谢,我最终弄明白了,这是一个完全无关的问题。很难相信...我正在解析XML来填充第二个表格,并且我已经在我重写的方法中将didStartElement作为参数,而不是didEndElement!可笑......虽然谢谢! – rpheath 2010-11-07 07:20:57

+0

很高兴你把它分类。 – Blounty 2010-11-07 08:21:32