我正在开发一个在导航堆栈中有三个表视图控制器的应用程序。根视图控制器和第二个VC有工具栏,但我想将子视图添加到第二个视图控制器like this。 (颜色就在那里可视化。)
我想以编程方式添加视图,因为我无法在没有严重问题的情况下使用IB。现在,通过在第二个视图控制器中绘制UIView,我已经能够得到我想要的东西:
- (void)viewDidLoad {
[super viewDidLoad]
UIView *detailView = [[UIView alloc] initWithFrame:CGRectMake(0, 392, 320, 44)];
detailView = [UIColor redColor];
[self.navigationController.view addSubview:detailView];
[detailView release];
}
这种方法的问题在于,一旦在第二个视图控制器中加载了UIView,它就会保持加载并在第三个和根视图控制器中绘制。我尝试了各种删除UIView的方法,包括在viewDidUnload中将detailView设置为nil,在didSelectRowAtIndexPath中调用removeFromSuperview(从整个堆栈中删除了视图)。
我也尝试将子视图添加到self.view中,但是它会将其推送到表格视图的可见区域下方,所以我必须向上滚动才能看到它,当我放手时它会快速向下移动。< / p>
显然,将此子视图添加到导航控制器并不是我想要的最佳方式,但我不知道从哪里开始。
答案 0 :(得分:2)
我不喜欢这种做法。您应该将表视图放在另一个视图中,并将详细视图放在该视图中。
尽管如此,我认为您可以在视图控制器的viewWillDisappear
方法中删除您的视图。我还注意到你没有将detailView
保存为私有变量,你应该这样做,因为你需要在以后删除它时引用它(我仍然想知道你是怎么做的。)
请注意,在视图卸载(即从其控制器释放)的情况下调用viewDidUnload
,因此它与导航无关。
答案 1 :(得分:2)
正如您已经发现的那样,您绝对不应该进入导航控制器的视图。
您希望SecondViewController
成为实现UITableViewDelegate和UITableViewDataSource的UIViewController
,并且其视图在您自己的主要UIView中为您的固定“页脚”提供UITableView和UIView。
有助于记住,UITableViewController最终只是为了创建一个视图控制器,它的视图完全由UITableView组成。
无论如何,您可以在this read-only svn repo中浏览它(或svn co
),而不是尝试在此答案中插入一堆代码。
已编辑(现在不是午夜,直接回答一些代码/解释):
要将控制器推送到需要页脚的导航堆栈,请创建一个新的基于UIViewController的类(不要检查模板选择对话框中的“UITableViewController子类”框。)
添加UITableView
和UIView
的实例变量作为额外的底部视图。
@interface SecondViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
UITableView* tableView;
UIView* customFooterView;
}
@property (nonatomic,retain) IBOutlet UITableView* tableView;
@property (nonatomic,retain) IBOutlet UIView* customFooterView;
@end
在IB中,将UITableView和UIView添加到控制器的现有根视图中,并根据需要进行布局(如果您的应用程序可以在横向和纵向中使用,则可能也值得更改自动调整大小参数)。将两个视图连接到“文件所有者”中为它们定义的出口,并确保将UITableView's
委托和dataSource属性连接起来指向“文件所有者”。
然后根据您的应用程序实现UITableViewDelegate和UITableViewDataSource协议。
如果你想在IB中列出整个“页脚”视图,那么就去吧。否则,您可以在viewDidLoad中以编程方式轻松添加项目(并记住在viewDidUnload中将其拆除)。
答案 2 :(得分:1)
不确定您正在寻找哪种行为,但请尝试以下方法之一:
将detailView分配给第二个VC上tableview的tableFooterView属性。
降低表格视图的高度,并将detailView添加到self.view。