2009-09-30 2 views
1

У меня есть класс UIViewController, где я создаю экземпляр UIView. И затем я инициализирую (означает заполнение) его 25 подзонами, каждый из которых содержит изображение (1, 2, ..., 25). Затем, щелкнув 5 раз в этом изображении, я вызвал функцию, в которой я использовалSubview удалить и добавить объектив c/iphone

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

для удаления ранее добавленного подсмотра. И затем я использую тот же самый подход к , добавив 25 новых подзонов (изображение 1,2,3, .... 25). Но на этот раз не добавлено subview. Может кто-нибудь PLZ дать мне полный код добавления & удаление subview.

Я использовал следующий код, когда я сначала добавить подвид

//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 

я использовал тот же Approch, чтобы добавить во второй раз, как первый раз, но проблема состоит в том, что при удалении 25 подвида, а затем добавить 25 subview, эти subview не добавляются/покажутся, представление остается таким же. Я устал от этой проблемы. PLZ кто-то мне помогает.

ответ

10

Проблема может заключаться в том, что вы удаляете старые представления. Вы изменяете массив во время итерации по нему, что не работает. Попробуйте этот код, чтобы удалить старые взгляды:

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

Рассматривая ваш код, я могу предложить следующие изменения. Там это одна строка в вашем цикл, который является очень неэффективным:

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

Либо взять Flower инициализацию из ряда для цикла (только создать массив один раз) или выполнить следующие действия:

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

Сам код выглядит так, как будто он должен работать. Если вы добавите 26 подъячейков, тогда удалите 26 подзонов, затем добавьте 26 подпунктов в точно так же, как и, тогда оно должно отображаться так, как вы ожидали.

1

Хороший один лайнер:

[view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
+0

В то время, когда вопрос был размещен в этом не будет работать, как код изменяет массив в то время как итерация над ним. Проблема, с которой '[UIView subviews]' возвращает закрытый измененный массив, который содержит представления, была исправлена ​​в некоторой версии iOS с тех пор. –

Смежные вопросы