1

重複または繰り返しの質問としてマークする前に、私の質問を読んでください...

  1. いくつかの画像を表形式で配置する scroleView が 1 つあります。

  2. ユーザーがいずれかをクリックすると、次のビュー コントローラーが表示され、クリックされた画像の uiview に緑色の境界線が表示されます。

  3. ユーザーがこのビューに戻ると、クリックされた画像が緑色の枠線で表示されます。これはすべてうまくいきました

しかし、ユーザーが他の画像をクリックすると問題が発生します。以前にクリックした画像は正常に戻りません。つまり、幅を 0.0 に設定し、色をclearColor

これらの境界線を削除する方法を教えてください

私のコードは以下の通りです:

for (int row = 0; row < r; ++row)
    {
        for (int col = 0; col < 2; ++col)
        {
            int index = (row * 2) + col;
            if(index < [tempArr count])
            {
                CGRect frame = CGRectMake(10+col*(10+145),10+row*(5+100),145, 100);
                UIView *fr = [[UIView alloc] initWithFrame:frame];
                CGRect imgFrame = CGRectMake(0, 0, 145, 100);
                UIImageView *imgView = [[UIImageView alloc]initWithFrame:imgFrame];
                imgView.image = [UIImage imageNamed:[[tempArr objectAtIndex:index]valueForKey:@"add"]];
                UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
                fr.layer.borderWidth = 0.0f;
                fr.layer.borderColor = [UIColor greenColor].CGColor;
                if(selctedFrame == index)//Here i put border
                {
                    fr.layer.borderWidth = 2.0f;
                    fr.layer.borderColor = [UIColor greenColor].CGColor;
                }
                else //here i remove them
                {
                    fr.layer.borderWidth = 0.0f;
                    fr.layer.borderColor = [UIColor clearColor].CGColor;
                }
                tapGesture.numberOfTapsRequired = 1;
                tapGesture.numberOfTouchesRequired = 1;
                [fr addGestureRecognizer:tapGesture]; 
                [fr addSubview:imgView];
                fr.tag = index;
                [self.scrollDisplay addSubview:fr];
                [self.scrollDisplay bringSubviewToFront:fr];
            }
        }
    }
    [self.view addSubview:self.scrollDisplay];

このメソッドはメソッドで呼び出されviewWillAppear:animated:ます

編集

ここに画像の説明を入力

前後のナビゲーションの後

ここに画像の説明を入力

4

2 に答える 2

0

境界線の色をビューの背景色に設定するだけです。他のオプションは何もしませんでした境界線は他のものによって隠されていません私が得た唯一の回避策はこれです

于 2012-04-25T08:32:32.950 に答える
0

新しい回答 - 問題は、新しいビューを何度も追加していることだと思います。を実行する代わりにUIView *fr = [[UIView alloc] initWithFrame:frame];、既存のビューを次のように見つけてUIView *fr = [self.scrollDisplay viewWithTag:index];変更します。実際には、前述の問題を引き起こすだけでなく、非常に非効率的な古いイメージビューに新しいイメージビューが追加されています。に既にビューを追加していると仮定していますscrollDisplay。また、新しいimgViewオブジェクトを再度作成しないでください。ユニークで入手しやすいタグを設定してください。たとえば、999それぞれにタグを設定し、次のimgViewように取得します。また、最後に、およびUIImageView *imgView = [fr viewWithTag:999];を取り除きます。したがって、コードは次のようになります。[fr addSubview:imgView];[self.scrollDisplay addSubview:fr];[self.view addSubview:self.scrollDisplay];

for (int row = 0; row < r; ++row)
    {
        for (int col = 0; col < 2; ++col)
        {
            int index = (row * 2) + col;
            if(index < [tempArr count])
            {
                CGRect frame = CGRectMake(10+col*(10+145),10+row*(5+100),145, 100);
                UIView *fr = [self. scrollDisplay viewWithTag:index];
                CGRect imgFrame = CGRectMake(0, 0, 145, 100);
                UIImageView *imgView = [fr viewWithTag:999];
     //imgView.image = [UIImage imageNamed:[[tempArr objectAtIndex:index]valueForKey:@"add"]]; //<--You've already set the image before so you don't need this
                UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
                fr.layer.borderWidth = 0.0f;
                fr.layer.borderColor = [UIColor greenColor].CGColor;
                if(selctedFrame == index)//Here i put border
                {
                    fr.layer.borderWidth = 2.0f;
                    fr.layer.borderColor = [UIColor greenColor].CGColor;
                }
                else //here i remove them
                {
                    fr.layer.borderWidth = 0.0f;
                    fr.layer.borderColor = [UIColor clearColor].CGColor;
                }
                tapGesture.numberOfTapsRequired = 1;
                tapGesture.numberOfTouchesRequired = 1;
    //[fr addGestureRecognizer:tapGesture]; //<-- Not needed if you've already done this
    //[fr addSubview:imgView];//<-- Not needed
                fr.tag = index;
    //[self.scrollDisplay addSubview:fr];//<-- Not needed
                [self.scrollDisplay bringSubviewToFront:fr];//<-- probably not needed
            }
        }
    }
    //[self.view addSubview:self.scrollDisplay];//<-- Not needed
于 2012-04-10T13:14:34.190 に答える