addSubview insertSubview aboveSubview有点混淆为什么它不起作用

时间:2009-08-23 18:23:12

标签: iphone objective-c uitableview

我对于为什么下面的子视图不起作用有点困惑。

我在导航控制器中添加了一些(子视图),所有这些都很有效。

-(UITableView *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

... 
...

    [self.navigationController.view addSubview:ImageView];
    [self.navigationController.view addSubview:toolbar];

在我的应用中添加一些内容我希望在工具栏上方添加另一个工具栏或图片。

所以让我说我正在做这样的事情

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    {
    ...
    ...

        [self.navigationController.view insertSubview:NewImageView aboveSubview:toolbar];
//crucial of course [edit]
            rvController = [RootViewController alloc] initWithNibName:@"RootViewController" bundle:[NSBundle] mainBundle];
rvController.CurrentLevel += 1;
rvController.CurrentTitle = [dictionary objectForKey:@"Title"];
[self.navigationController pushViewController:rvController animated:YES];
rvController.tableDataSource = Children;
[rvController release];

然而这不起作用.. 有谁知道我在这里做错了什么...... 我应该使用其他东西而不是addSubview,还是其他地方的问题?

1 个答案:

答案 0 :(得分:1)

根据您发布的内容,它看起来应该有效。

但是还有一些其他问题。首先,通常表示对象实例的varibales以小写开头。因此ImageViewNewImageView应为imageViewnewImageView

我会确保您的tableView:didSelectRowAtIndexPath:方法newImageView和工具栏都有效。它们是否在您的头文件中?

试试这个,看看出错的地方:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
...
...
    NSAssert(self.navigationController.view,@"WTF? self.navigationController.view is nil");
    NSAssert([self.navigationController.view superview],@"WTF? lf.navigationController.view  is not onscreen");
    NSAssert(newImageView,@"WTF? newImageView is nil");
    NSAssert(toolbar,@"WTF? toolbar is nil");
    NSAssert([toolbar superview],@"WTF? toolbar is on in the view");

    [self.navigationController.view insertSubview:newImageView aboveSubview:toolbar];
}