2012-02-20 2 views
2

У меня есть пользовательский UIView с альфа-0,5. Я хочу удалить первый вид, когда появится другой вид того же типа, и как это сделать?ios Как удалить определенный UIView, который выполнен на заказ

До сих пор я писал это, я получаю журнал из «не видно» всего времени:

MyCustomView *myTranslation = [[MyCustomView alloc]initWithFrame:CGRectMake(0, 330, 320, 150)]; 

if (myTranslation.tag == 2) 
{ 
    NSLog (@"is shown yes"); 
    [[myTranslation viewWithTag:2] removeFromSuperview]; 

} 

else 
{ 
    NSLog(@"not visible"); 
    myTranslation.tag = 2; 

}  

myTranslation.backgroundColor = [UIColor brownColor]; 

myTranslation.alpha = 0.5; 

myTranslation.opaque = 0.5; 

[self.view addSubview:myTranslation]; 
[myTranslation show]; 
[myTranslation release]; 

ответ

3

Вы не получаешь то, что вы ожидаете, потому что вы инстанцирование нового вида в любом случае. Это новое представление не будет помечено вообще (свойство тега будет установлено равным нулю), поэтому вы получите этот результат.

Что вы на самом деле хотите сделать, это попытаться получить экземпляр вида из существующего вида viewController с помощью viewWithTag, как показано ниже. Затем вы проверяете, действительно ли вы получили соответствующий вид. Только если вы не получили действительного представления (myTranslation равно nil), вы должны создать новый экземпляр и пометить его соответствующим образом.

MyCustomView *myTranslation = (MyCustomView *)[self.view viewWithTag:2]; 
if (myTranslation != nil) 
{ 
    NSLog (@"is shown yes"); 
    [myTranslation removeFromSuperview]; 
} 
else 
{ 
    myTranslation = [[MyCustomView alloc] initWithFrame:CGRectMake(0, 330, 320, 150)]; 
    NSLog(@"not visible"); 
    myTranslation.tag = 2; 
} 

... 
+0

Ваш код идеален! Спасибо, что объяснили мне логику и функции вашего кода. Это ценно. – wagashi

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