我有一个以程序方式添加子视图的视图
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吗?
答案 0 :(得分:3)
从长远来看,使用索引似乎很脆弱,所以最好避免使用。
一种方法是在成员变量中保留指向视图的指针,这样就不需要使用objectAtIndex。
另一种方法是:
[CV setTag:5];
而不是objectAtIndex,请使用:
[self.view withWithTag:5];
('5'是一个仲裁选择 - 它应该是你程序中的唯一编号!最好使用#define或enum来存储值 - 例如#define MY_VIEW_TAG 5和setTag:MY_VIEW_TAG等)