как выпустить добавленный uiview как подпредставление в scrollview? - PullRequest
0 голосов
/ 29 августа 2009

Я добавил вид UIViewController и кнопку для прокрутки в виде подпредставления ... теперь как мне выпустить все экземпляры UIViewController ... вот прикрепленное изображение alt text

в представлении каждый пользовательский интерфейс имеет кнопку над ним для дальнейшей навигации ....

теперь я хочу выпустить uiview и удалить кнопки из прокрутки ... вот мой метод добавления подпредставлений - (void) AddOneButton: (NSInteger) myButtonTag { lastButtonNumber = lastButtonNumber + 1;

if ((lastButtonNumber == 1) || ((lastButtonNumber%2) == 1)) {
btnLeft = 8;}
else if ((lastButtonNumber == 2) || ((lastButtonNumber%2) == 0)) {
btnLeft = 162;
}

 CGRect frame1 = CGRectMake(btnLeft, btnTop, 150, 150);
CGRect frame2 = CGRectMake(btnLeft, btnTop, 150, 150);
UIButton *Button = [UIButton buttonWithType:UIButtonTypeCustom];
Button.frame = frame1;
Button.tag = myButtonTag;
[Button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
[Button setBackgroundColor:[UIColor clearColor]];
[Button setBackgroundImage:[UIImage imageNamed:@"WaitScreen.png"] forState:UIControlStateHighlighted];
[Button setBackgroundImage:[UIImage imageNamed:@"WaitScreen.png"] forState:UIControlStateSelected];
if(categoryType==1)
{
    MultiChoiceThumbViewControllerobj = [[MultiChoiceThumbViewController alloc] initWithPageNumber:myButtonTag+1];
    MultiChoiceThumbViewControllerobj.view.frame=frame2;
    MultiChoiceThumbViewControllerobj.lblCounter.text=[NSString stringWithFormat:@"%d of %d",myButtonTag+1,flashCardsId.count];
    MultiChoiceThumbViewControllerobj.lblQuestion.text=[flashCardText objectAtIndex:myButtonTag];
    [myScrollView addSubview:MultiChoiceThumbViewControllerobj.view];       
}
[myScrollView addSubview:Button];
 }

с этим кодом количество просмотров подпункта = 96.

Я использовал этот метод в dealloc для удаления подпредставлений, но он не выпускает UIvicontroller

     for(UIView *subview in [myScrollView subviews])
    {
        [subview removeFromSuperview];
        NSLog(@"Subviews Count=%d",myScrollView.subviews.count);
    }

как мне выпустить uiviewcontroller's ???

1 Ответ

0 голосов
/ 29 августа 2009

Когда вы создавали свои UIViewController s, вы никогда не передавали свое собственное владение им, поэтому, пока вы сами не освободите его, оно никогда не исчезнет. Проблема в том, что ничто другое не владеет UIViewController s, поэтому, если вы используете autorelease, они будут немедленно освобождены.

Мое решение было бы создать NSMutableArray и добавить их в массив перед вызовом release для них. Затем, когда вы захотите освободить все ваши UIViewController s, удалите их из массива. NSMutableArray сохраняет право собственности на объекты, которые вы добавляете к нему, и освобождает право собственности при удалении или освобождении. Примерно так:

-(id) init {
    subViewControllers = [NSMutableArray new];
}
...
-(void)AddOneButton:(NSInteger)myButtonTag {
    ...
    if(categoryType==1) {
        MultiChoiceThumbViewControllerobj = [[MultiChoiceThumbViewController alloc] initWithPageNumber:myButtonTag+1];
        MultiChoiceThumbViewControllerobj.view.frame=frame2;
        MultiChoiceThumbViewControllerobj.lblCounter.text=[NSString stringWithFormat:@"%d of %d",myButtonTag+1,flashCardsId.count];
        MultiChoiceThumbViewControllerobj.lblQuestion.text=[flashCardText objectAtIndex:myButtonTag];
        [myScrollView addSubview:MultiChoiceThumbViewControllerobj.view];
        [subViewControllers addObjet:MultiChoiceThumbViewControllerobj];
        [MultiChoiceThumbViewControllerobj release];
    }
    [myScrollView addSubview:Button];
}
...
- (void) removeSuperviews {
    for(UIView *subview in [myScrollView subviews]) {
            [subview removeFromSuperview];
            NSLog(@"Subviews Count=%d",myScrollView.subviews.count);
    }
    [subViewControllers removeAllObjects];
}
...