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

问题描述:

我有就将此子视图programmticallyiPhone - 删除子视图并再次添加它,[self.views子视图] objectAtIndex更改?

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]; 

现在我要删除它在点击一个按钮,并重新添加它,所以我做到了又写了1这样

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:变量?

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

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

另一种方法是做:

[CV setTag:5]; 

和替代objectAtIndex,用途:

[self.view withWithTag:5]; 

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

+0

太棒了!一个问题,我如何从当前视图中删除标记的视图?因为我不能使用[CV removeFromSuperView] – Kenneth 2010-07-15 08:21:31

+0

我想你可以使用[CV removeFromSuperView]还是?否则,[[self.view viewWithTag:5] removeFromSuperView]应该这样做, – JosephH 2010-07-15 08:27:00

+0

酷。大。有效。!多谢,伙计 – Kenneth 2010-07-15 08:32:34