iPhone - 删除子视图并再次添加,[self.views子视图] objectAtIndex更改?

时间:2010-07-15 08:07:12

标签: iphone

我有一个以程序方式添加子视图的视图

    SelectionScreenTable *aSelectionScreenTableViewController = [[SelectionScreenTable alloc] initWithNibName:@"SelectionScreenTable" bundle:[NSBundle mainBundle]];

aSelectionScreenTableViewController.view.bounds = CGRectMake(0,0,955,520);
aSelectionScreenTableViewController.view.center = CGPointMake(528, 379);

[self.view addSubview:aSelectionScreenTableViewController.view];

现在我希望在点击按钮时删除它并再次添加它,所以我写了另外一个这样的

SelectionScreenTable *viewController =[[SelectionScreenTable alloc]initWithNibName:@"SelectionScreenTable" bundle:nil];
viewController.view.bounds = CGRectMake(0,0,955,520);
viewController.view.center = CGPointMake(528, 379);

UIView *CV = [UIView alloc];
CV = [[self.view subviews]objectAtIndex:3]; 
[CV removeFromSuperview];
[CV release];

[self.view addSubview:viewController.view];

它有效,但有一件事我注意到它被移除并再次添加。

[self.view subviews] objectAtIndex:3似乎改变了索引?因为我只能在应用崩溃之前点击一定次数。

如果是这样,我应该在每次单击按钮时使用变量+ 1进行增量并使用objectAtIndex:variable吗?

1 个答案:

答案 0 :(得分:3)

从长远来看,使用索引似乎很脆弱,所以最好避免使用。

一种方法是在成员变量中保留指向视图的指针,这样就不需要使用objectAtIndex。

另一种方法是:

[CV setTag:5];

而不是objectAtIndex,请使用:

[self.view withWithTag:5];

('5'是一个仲裁选择 - 它应该是你程序中的唯一编号!最好使用#define或enum来存储值 - 例如#define MY_VIEW_TAG 5和setTag:MY_VIEW_TAG等)