0

このイベントを開始したいと思います:

- (IBAction)profilePop:(id)sender
{
    ProfileViewController * profile = [[ProfileViewController alloc] init];
    UIImageView * temp = ((UIImageView *)sender);
    profile.uid =  [[[posts objectAtIndex:((UIImageView *)sender).tag] creator] mid];
    NSLog(@"profile id %@", profile.uid);
    UIPopoverController * profilePop  = [[UIPopoverController alloc] initWithContentViewController:profile];
    [profilePop presentPopoverFromRect:CGRectMake(temp.frame.origin.x+temp.frame.size.width, temp.frame.origin.y + temp.frame.size.height/2, profile.view.frame.size.width, profile.view.frame.size.height) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];
}

ユーザーが UIImageView をタップしたとき。私がやろうとしているのは、UIImageView がクリックされ、UIImageView の右側に表示されたときにポップオーバーを表示することだけです。UIImageView は UIControl のサブクラスではないため、そこからの addAction 属性がありません。代わりに UIButton を使用する必要があるかもしれないという調査を行いました。これは本当ですか?コードを再度書き直す必要がないように、UIImageView を使用してこれを行う方法はありますか? 私

4

4 に答える 4

2

初め。

としてスーパー クラスを持つ任意のオブジェクトに触れることができますUIView

AppleのドキュメントにUIImageViewが表示されている場合。

UIView : UIResponder : NSObject

UIResponderにはタッチを取得する機能があります。ビュークラスに以下の関数を実装し、あなたのタッチを検出しますUIImageView

– touchesBegan:withEvent:
– touchesMoved:withEvent:
– touchesEnded:withEvent:
– touchesCancelled:withEvent:

2番:

UITapGestureRecognizer for を作成することもできますUIImageView

以下のブログのチュートリアルを確認してください。

UIGestureRecognizer の操作

編集:

以下のコードを使用します。

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]             initWithTarget:self action:@selector(tapped:)];
[tapRecognizer setNumberOfTapsRequired:1];
[tapRecognizer setDelegate:self];
[MyImageView addGestureRecognizer:tapRecognizer];

ユーザーが一度タップすると、タップされた関数が呼び出されます。したがって、タブ化された関数の実装は次のようになります

 -(void)tapped:(id)sender
     {

       NSLog(@"See a tap gesture");

         ProfileViewController * profile = [[ProfileViewController alloc] init];
         UIImageView * temp = [(UIPanGestureRecognizer*)sender view];
        profile.uid =  [[[posts objectAtIndex:((UIImageView *)sender).tag] creator] mid];
        NSLog(@"profile id %@", profile.uid);
        UIPopoverController * profilePop  = [[UIPopoverController alloc] initWithContentViewController:profile];
      [profilePop presentPopoverFromRect:CGRectMake(temp.frame.origin.x+temp.frame.size.width, temp.frame.origin.y + temp.frame.size.height/2, profile.view.frame.size.width, profile.view.frame.size.height) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];
    }
于 2011-05-15T18:51:59.733 に答える
0

Tap Gestureレコグナイザーを作成し、それをUIImageViewにアタッチすることができます。

// By now imageView exists!
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
tapGesture.numberOfTapsRequired = 1;
tapGesture.numberOfTouchesRequired = 1;
[imageView addGestureRecognizer:tapGesture];
[tapGesture release];

これで、handleTapGestureはあなたと非常によく似たものになります-profilePop:

あなたはポップオーバーコントローラーについて話しているので、私はあなたがすでにジェスチャーレコグナイザーを利用できると思います。

于 2011-05-15T18:53:53.957 に答える
0

代わりにUIButtonを使用し、クラス メソッドを使用して UIImage を追加するのはどうですか。

- (void)setImage:(UIImage *)image forState:(UIControlState)state 
于 2011-05-15T18:49:15.253 に答える
0

カスタム タイプの UIButton を定義し、テキストや画像を指定せず、明確な背景を指定し、画像ビューと同じフレームを指定できます。次に、ターゲット/セレクターをボタンに追加すると、ユーザーが実際に非表示のボタンをタップしているときに、画像ビューをタップしているように見えます。これは IB でのセットアップに約 3 分かかるはずなので、コードを再度書き直す必要はないと思います。

于 2011-05-15T18:49:21.650 に答える