在UITableViewController中添加子视图

时间:2010-12-09 21:39:09

标签: iphone cocoa-touch uitableview

我正在使用UITableViewController,我已经调整了表视图的高度并将其移动了一点。现在我想在表视图上面添加一个UIImageView,但我唯一能做的就是将UIImageView添加为UITableViewController的UITtableView的子视图,这样UIImageView就不在UITableView上面了,图像随桌面滚动图。

我怎样才能完成我正在尝试的事情?这是我一直在使用的代码:

UIImageView *tabImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"temp.png"]];
[self.view addSubview:tabImageView];

谢谢!

3 个答案:

答案 0 :(得分:18)

我相信UITableViewController要求其viewUITableView

过去,我通过将视图控制器从子类化UITableViewController更改为子类化UIViewController并实现UITableViewDataSourceUITableViewDelegate协议来解决这个问题。然后,您可以将view设为您想要的任何内容,包括将UITableView向下移动并添加UIImageView

不确定在4.2中是否仍然如此。

答案 1 :(得分:9)

编辑(2013年12月16日)

只是想澄清一下,这确实不是一个好主意,原因很多,其中一些列在评论中。你应该真的在做Shaggy Frog的建议,或使用View Controller Containment。

原始答案

您希望UIImageView位于tableView的顶部?如果是这样,您需要将其设置为UINavigationController的子视图,而不是UITableView。最简单的方法是使用[self.view.superview addSubview:tabImageView]。 (尽管正如Shaggy Frog所说,最好从UITableViewController更改为普通UIViewController,并手动创建UITableView

如果您希望将UIImageView附加到UITableView,那么当您向下滚动时,它会消失,您可以将其设置为带有[self.tableView setTableHeaderView:tabImageView]的表格标题

答案 2 :(得分:0)

UITableView的静态UITableViewController中取4个单元格,其高度为44 PX&宽度320PX。在tableView文件中注释所有UITableViewController.m委托方法并输入此代码。

- (void)viewDidAppear:(BOOL)animated
{
    UIImageView *backgroundView =[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 170)];
    backgroundView.image=[UIImage imageNamed:@"default-cover-image.jpg"];
    [self.view.superview addSubview:backgroundView];

    [self.tableView setFrame:CGRectMake(0, 170, 320, 960)];
    [[[UIApplication sharedApplication] keyWindow] setBackgroundColor:[UIColor whiteColor]];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];

    if ((indexPath.row)==0)
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"one"];

        UIImageView *backgroundView =[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        backgroundView.image=[UIImage imageNamed:@"sectionHeader.png"];

        [cell.contentView addSubview:backgroundView];
    }
    if ((indexPath.row)==1)
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"two"];

        UIImageView *backgroundView =[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        backgroundView.image=[UIImage imageNamed:@"sectionHeader2.png"];

        [cell.contentView addSubview:backgroundView];
    }
    if ((indexPath.row)==2)
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"three"];

        UIImageView *backgroundView =[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        backgroundView.image=[UIImage imageNamed:@"sectionHeader3.png"];

        [cell.contentView addSubview:backgroundView];
    }
    if ((indexPath.row)==3)
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"four"];

        UIImageView *backgroundView =[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        backgroundView.image=[UIImage imageNamed:@"sectionHeader.png"];

        [cell.contentView addSubview:backgroundView];
    }

    return cell;
}

希望,它会工作。