2009-09-30 3 views
1

나는 UIView 인스턴스를 만드는 UIViewController 클래스가 있습니다. 그런 다음 이미지 (1, 2, ..., 25)가 포함 된 25 개의 하위보기로 초기화 (채우기를 의미)합니다. 그런 다음이 이미지에서 5 번 클릭 한 후 내가 사용했던 함수를 호출했습니다.Subview 제거하고 객관적인 C/아이폰에 추가

for(UIView *subview in [contentView subviews]) { 
    [subview removeFromSuperview];//ContentView name of my view 
} 

이전에 추가 된 하위 뷰를 제거하려면 다음을 수행하십시오. 그리고 나서 나는 같은 approch을 사용하여 25 개의 새로운 하위 뷰 (이미지 1,2,3, .... 25)를 추가합니다. 그러나 이번에는 하위 뷰가 추가되지 않습니다. 누군가 plz 나를 추가 & 하위보기를 제거하는 전체 코드를 제공 할 수 있습니까?

내가 먼저 내가 처음으로 두 번째 시간을 추가하기 위해 같은 approch을 사용

//create main window 

contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
contentView.backgroundColor = [UIColor blackColor]; 
self.view = contentView; 
[contentView release]; 

//adding 25 subview 1st time 
int a=0; 
int b=0; 
for (int i = 0; i < 26; i++) 
{ 

    CGRect dragRect = CGRectMake(0.0f, 0.0f, x, y); 
    dragRect.origin = CGPointMake(a,b); 
    DragView *dragger = [[DragView alloc] initWithFrame:dragRect]; 
    NSString *Flower = [[NSArray arrayWithObjects:@"1.png", @"2.png", @"3.png",@"4.png", @"5.png", @"6.png",@"7.png",@"8.png", @"9.png",@"10.png", @"11.png", @"12.png",@"13.png",@"14.png",@"15.png",@"16.png",@"17.png",@"18.png",@"19.png",@"20.png",@"21.png",@"22.png",@"23.png",@"24.png",@"25.png",@"26.png", nil] objectAtIndex:i]; 
    [dragger setImage:[UIImage imageNamed:Flower]]; 
    [dragger setUserInteractionEnabled:YES]; 
    [self.view addSubview:dragger]; 
    [dragger release]; 
    a+=10; 
    b+=10; 
} 

//then removing 25 subview 

//adding 25 subview 2nd times 

하위 뷰를 추가 할 때 다음 코드를 사용하고 있지만, 문제는 내가 25 하위 뷰를 제거 할 때 다음 25을 추가 할 것입니다 하위보기,이 하위보기는 추가/표시되지 않으며보기는 동일하게 유지됩니다. 나는이 문제에 피곤하다. plz 누군가 나를 도와주세요.

답변

10

문제는 이전보기를 제거하는 방법 일 수 있습니다. 배열을 반복하면서 배열을 수정하는 중이므로 작동하지 않습니다.

UIView* subview; 
while ((subview = [[contentView subviews] lastObject]) != nil) 
    [subview removeFromSuperview]; 
0

코드를 보면 다음 변경 사항을 제안 할 수 있습니다.

[dragger setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.png", i]]]; 

:

NSString *Flower = [[NSArray arrayWithObjects:@"1.png", @"2.png", @"3.png",@"4.png", @"5.png", @"6.png",@"7.png",@"8.png", @"9.png",@"10.png", @"11.png", @"12.png",@"13.png",@"14.png",@"15.png",@"16.png",@"17.png",@"18.png",@"19.png",@"20.png",@"21.png",@"22.png",@"23.png",@"24.png",@"25.png",@"26.png", nil] objectAtIndex:i]; 
[dragger setImage:[UIImage imageNamed:Flower]]; 

중 하나는 다음 for 루프 (한 번만 배열을 만들려면)의 밖으로 Flower 초기화를 수행하거나 수행 대단히 비효율적이다 루프에 대한 하나 개의 라인이있다 그래도 작동해야하는 코드 자체가 보인다. 26 개의 하위보기를 추가 한 다음 26 개의 하위보기를 제거한 다음 에 정확히의 26 개의 하위보기를 추가하면 예상대로 표시됩니다.

1

좋은 하나 라이너는 다음과 같습니다 : 반복하면서

문제는 코드로,이 일을하지 않았을 게시 한 시간에서
[view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
+0

배열을 수정 이전 뷰를 제거하려면이 코드를 사용해보십시오 그걸로. 일부 UI 버전에서'[UIView subviews]'가보기를 보유하는 개인 가변 배열을 반환하는 문제가 수정되었습니다. –

관련 문제