-2

ビューからすべての UIButtons を削除するのに苦労しています。

それらを for ループに追加しましたがUIScrollView、後でそれらを削除する必要があります。

それらを追加するには:(cocos2dシーン上)

sview = [[UIScrollView alloc]
                          initWithFrame:[[UIScreen mainScreen] bounds]];

......
for(int i =0; i<[assets count]-1; i++)  
    {

        UIImage *thumb= [assets objectAtIndex:i];
        UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
               [sview addSubview:button];
.......
 [[[CCDirector sharedDirector] view] addSubview:sview];

そしてそれらを削除するには:

[((UIView *)sview) removeFromSuperview]; //which usually works but no now .

後でこのすべてのボタンを実行して削除するにはどうすればよいですか? それらへのリンクがありません。ビュー内のすべてのボタンで実行したいと思います..

編集:成功せずにこれを試しました

for (int i=0; i<[assets count];i++)
    {
        UIButton *myButton = (UIButton *)[sview viewWithTag:i];
         [((UIView *)myButton) removeFromSuperview];
    }
4

5 に答える 5

2

技術的には可能ですが、このようにコードを設計することはお勧めできません。

私はそれらへのリンクを持っていません

ここにあなたの問題があります。それらNSMutableArrayを作成して追加するときにそれらを入れてから、この配列を反復処理してそれらを削除します。

ただし、何らかの理由でそれを行わない場合は、ビューのすべてのサブビューが UIButton であることを確認できます。

- (void)removeUIButtonsFromView:(UIView *v)
{
    for (UIView *sub in v.subviews) {
        if ([sub isKindOfClass:[UIButton class]]) {
            [sub removeFromSuperview];
        } else {
            [self removeUIButtonsFromView:sub];
        }
    }
}
于 2013-02-27T15:46:00.630 に答える
1

行うにはいくつかの方法があります。一部の人々は1つの方法を提案しました。私は個人的に、追加したものをすべて保持しNSMutableArray(ビューに追加するときに配列に追加してから)、配列をループして削除するのが好きです。

for ( ... ; ... ; ...) {
    UIButton *button = ....
    // in your "add button loop" just record them in an array
    [self.transientViews addObject:button];
}


// remove them later with
for (UIView *view in self.transientViews)
    [view removeFromSuperview];
[self.transientViews removeAllObjects];

柔軟性が増すので、これが好きです。それらか何か他のものを削除したいかもしれません。それらはのサブクラスである可能性がありUIView、私はそれについて心配する必要はありません。

于 2013-02-27T15:52:34.440 に答える
1

スクロール ビューのボタンのみの場合は、次のコマンドですべて削除します。

[sview.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
于 2013-02-27T15:47:18.457 に答える
1
for (UIView *subview in [((UIView *)sview).subviews copy]) {
    if ([subview isKindOfClass:[UIButton class]])
        [subview removeFromSuperview];
}
于 2013-02-27T15:45:39.250 に答える
0
[((UIView *)sview) removeFromSuperview]

スクロールビューを削除していますsview:なぜですか?

ボタンを追加するときは、NSArray保持しているプロパティにも追加するだけです。次に、それらを削除するたびにその配列を繰り返します

//in your interface

@property (nonatomic, strong) NSArray *buttons;

//in your implementation

sview = [[UIScrollView alloc]
                          initWithFrame:[[UIScreen mainScreen] bounds]];

......
NSMutableArray *tempArray = [NSMutableArray array];
for(int i =0; i<[assets count]-1; i++)  
    {

        UIImage *thumb= [assets objectAtIndex:i];
        UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
               [sview addSubview:button];
        [tempArray addObject:button];
    }
    self.buttons = tempArray;
.......

// later, to remove all buttons

- (void) removeButtons
{
    for(UiButton *button in self.buttons){
        [button removeFromSuperview];
    }
    self.buttons = nil;
}
于 2013-02-27T15:48:27.943 に答える