Iphone 将UIView子视图添加到导航堆栈中的单个表视图控制器

Iphone 将UIView子视图添加到导航堆栈中的单个表视图控制器,iphone,uiview,uinavigationcontroller,subview,tableview,Iphone,Uiview,Uinavigationcontroller,Subview,Tableview,我正在开发一个在导航堆栈中有三个表视图控制器的应用程序。根视图控制器和第二个VC有工具栏,但我想向第二个视图控制器添加一个子视图。(颜色仅用于可视化。) 我想以编程的方式添加视图,因为我无法用IB来完成这项工作,而不会带来很大的麻烦。现在,我已经能够通过在第二个视图控制器中绘制UIView获得我想要的东西,如下所示: - (void)viewDidLoad { [super viewDidLoad] UIView *detailView = [[UIView alloc

我正在开发一个在导航堆栈中有三个表视图控制器的应用程序。根视图控制器和第二个VC有工具栏,但我想向第二个视图控制器添加一个子视图。(颜色仅用于可视化。)

我想以编程的方式添加视图,因为我无法用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,在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
      ),而不是尝试将一堆代码内联到这个答案中

      已编辑(现在不是午夜,直接输入一些代码/解释)