Iphone 将UIView子视图添加到导航堆栈中的单个表视图控制器
我正在开发一个在导航堆栈中有三个表视图控制器的应用程序。根视图控制器和第二个VC有工具栏,但我想向第二个视图控制器添加一个子视图。(颜色仅用于可视化。) 我想以编程的方式添加视图,因为我无法用IB来完成这项工作,而不会带来很大的麻烦。现在,我已经能够通过在第二个视图控制器中绘制UIView获得我想要的东西,如下所示:Iphone 将UIView子视图添加到导航堆栈中的单个表视图控制器,iphone,uiview,uinavigationcontroller,subview,tableview,Iphone,Uiview,Uinavigationcontroller,Subview,Tableview,我正在开发一个在导航堆栈中有三个表视图控制器的应用程序。根视图控制器和第二个VC有工具栏,但我想向第二个视图控制器添加一个子视图。(颜色仅用于可视化。) 我想以编程的方式添加视图,因为我无法用IB来完成这项工作,而不会带来很大的麻烦。现在,我已经能够通过在第二个视图控制器中绘制UIView获得我想要的东西,如下所示: - (void)viewDidLoad { [super viewDidLoad] UIView *detailView = [[UIView alloc
- (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,在DidSelectRowatingIndexPath中调用removeFromSuperview(这将从整个堆栈中删除视图)
我还尝试将子视图添加到self.view,但这会将其推到表视图的可见区域下方,因此我必须向上滚动才能看到它,当我放开它时,它会向下捕捉
显然,将此子视图添加到导航控制器并不是我想要的最佳方式,但我不知道从这里开始该怎么做。不确定您要查找的行为,但请尝试以下其中一种:
- 将detailView指定给第二个VC上tableview的属性
- 减小表格视图的高度,并将detailView添加到self.view
- 将detailView指定给第二个VC上tableview的属性
- 减小表格视图的高度,并将detailView添加到self.view
- 我不喜欢这种方法。您应该将表视图放在另一个视图中,并将详图视图放在该视图中
尽管如此,我认为您可以在视图控制器的
viewwilldiscover
方法中删除视图。我还注意到,您没有将detailView
保留为私有变量,您应该这样做,因为在以后删除它时需要引用它(我仍然不知道您是如何做到的)
请注意,
viewDidUnload
是在视图卸载(即从其控制器释放)的情况下调用的,因此它与导航无关。我不喜欢这种方法。您应该将表视图放在另一个视图中,并将详图视图放在该视图中
尽管如此,我认为您可以在视图控制器的viewwilldiscover
方法中删除视图。我还注意到,您没有将detailView
保留为私有变量,您应该这样做,因为在以后删除它时需要引用它(我仍然不知道您是如何做到的)
请注意,在视图卸载(即从其控制器释放)的情况下,会调用
viewDidUnload
,因此它与导航无关。正如您已经发现的,您绝对不应该接触到导航控制器的视图
您希望您的SecondViewController
成为一个UIViewController
,该控制器实现UITableViewDelegate和UITableViewDataSource,其视图列出了UITableView和您希望在其主UIView中用于固定“页脚”的UIView
请记住,UITableViewController最终只是创建视图完全由UITableView组成的视图控制器的一种方便
无论如何,您可以从以下位置浏览它(或svnco
),而不是尝试将一堆代码内联到这个答案中
编辑(现在已经不是午夜了,直接在答案中加入一些代码/解释):
对于要推送到需要页脚的nav堆栈上的控制器,请创建一个新的基于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
@interface SecondViewController:UIViewController{
UITableView*表格视图;
UIView*自定义页脚视图;
}
@属性(非原子,保留)IBUITableView*tableView;
@属性(非原子,保留)IBUIView*customFooterView;
@结束
在IB中,将UITableView和UIView添加到控制器的现有根视图中,并根据需要进行布局(如果您的应用程序可以同时用于横向和纵向,则可能也值得更改自动调整大小参数)。将这两个视图连接到“文件所有者”中为它们定义的出口,并确保将UITableView的
委托和数据源属性连接到指向“文件所有者”的位置
然后根据应用程序的需要实现UITableViewDelegate和UITableViewDataSource协议
如果您想在IB中布局整个“页脚”视图,请直接进行。否则,您可以轻松地在viewDidLoad中以编程方式添加项目(并记住在viewDidUnload中将其拆下)。正如您已经发现的,您绝对不应该进入导航控制器的视图 您希望您的
SecondViewController
成为一个UIViewController
,该控制器实现UITableViewDelegate和UITableViewDataSource,其视图列出了UITableView和您希望在其主UIView中用于固定“页脚”的UIView
请记住,UITableViewController最终只是创建视图完全由UITableView组成的视图控制器的一种方便
无论如何,您可以从以下位置浏览它(或svnco
),而不是尝试将一堆代码内联到这个答案中
已编辑(现在不是午夜,直接输入一些代码/解释)