2010-07-15 57 views
1

我有就將此子視圖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:變量?

回答

3

使用索引似乎從長遠來看會很脆弱,所以最好避免使用。

一種方法是在成員變量中保留指向視圖的指針,這樣就不需要使用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