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等)
太棒了!一个问题,我如何从当前视图中删除标记的视图?因为我不能使用[CV removeFromSuperView] – Kenneth 2010-07-15 08:21:31
我想你可以使用[CV removeFromSuperView]还是?否则,[[self.view viewWithTag:5] removeFromSuperView]应该这样做, – JosephH 2010-07-15 08:27:00
酷。大。有效。!多谢,伙计 – Kenneth 2010-07-15 08:32:34