0

これは奇妙なものです。

私はXcodeにまったく慣れていません。ボタンビューをシングルクリックすると新しいボタンが追加され、ダブルクリックするとボタンが削除されるシンプルなアプリを作成しようとしています。

ボタンの追加は問題ありませんが、ボタンの削除は信頼できません。ダブルクリックで最後に追加されたボタンのみが削除され、実際にクリックしたボタンは削除されないように見えるため、コードの記述方法と関係があると思います。

私の要約された.mコードは以下のとおりです。

- (void)viewDidLoad
{


- (void)handleSingleTap:(UITapGestureRecognizer *)tapper {

//adds the buttons and gives them a unique tag

ButtonCount  = ButtonCount+1;
btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0, 0, 150, 150);
btn.userInteractionEnabled = YES;
btn.tag=PuckCount;

//attaches double tap recognizer to button

UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                                                      initWithTarget:self
                                                            action:@selector(handleDoubleTap:)];
[doubleTapGestureRecognizer setNumberOfTapsRequired:2];
[btn addGestureRecognizer:doubleTapGestureRecognizer];



//Add Tap Recognizer to pucks to create new buttons

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                                                      initWithTarget:self
                                                      action:@selector(handleSingleTap:)];
[singleTapGestureRecognizer setNumberOfTapsRequired:1];
[singleTapGestureRecognizer requireGestureRecognizerToFail:doubleTapGestureRecognizer];
[btn addGestureRecognizer:singleTapGestureRecognizer];
UIImage *buttonImage = [UIImage imageNamed:@"puck2.png"];
[btn setImage:buttonImage forState:UIControlStateNormal];
[self.view addSubview:btn];
}


//handles what happens on a double tap - THIS IS WHERE I THINK THE PROBLEM IS.

- (void)handleDoubleTap:(UIGestureRecognizer *)doubletap{

PuckSelected = self.view.tag;
[[self.btn viewWithTag:PuckSelected] removeFromSuperview];
}
@end
4

4 に答える 4

0

ダブルタップされているボタンを削除しようとしている場合は、これを試してください。

- (void) handleDoubleTap:(UIGestureRecognizer *) doubletap {
   [doubletap.view removeFromSuperview];
}

UIGestureRecognizer にはビューがアタッチされています。再度取得する必要はありません。さらに、あなたの問題は、ダブルタップではなく自分自身からビューを取得しようとしていたことでした

于 2013-02-07T21:00:22.267 に答える
0
- (void)handleDoubleTap:(UIGestureRecognizer *)doubletap{
  PuckSelected = self.view.tag;
  [[self.btn viewWithTag:PuckSelected] removeFromSuperview];
}

上記のコードによると、削除されるボタンは と同じタグを持つボタンですself.view。しかし、self.views タグがどのように設定されるかを示していないため、コードが削除されるボタンを選択する理由や方法を知ることは不可能です。

とにかく、ここで間違った道を進んでいる可能性があります。ボタンの中にボタンがネストされているように見えますか?これは奇妙です。UIButtonまた、必要のない s でジェスチャ認識機能を使用しています。ターゲット アクション メカニズムを介してタップやダブルタップなどに応答します。

一般に、コントロール (つまり、 から派生したオブジェクトUIControl) は、タッチ、タップ、およびその他の単純な操作を既に処理しています。UIViewスワイプやピンチなどを追跡する必要がある s でジェスチャ認識エンジンを使用するだけです。

于 2013-02-07T21:00:31.187 に答える
0

あなたの handleDoubleTap メソッドは意味がありません。このようなことをしてください::

- (void)handleDoubleTap:(UIGestureRecognizer *)doubletap{

    PuckSelected = doubletap.view.tag;
    [[self.view viewWithTag:PuckSelected] removeFromSuperview];
}

そして、それはうまくいきます

于 2013-02-07T21:01:20.157 に答える
0

あなたのコードには2つの問題があるようです。1.シングルタップを行うと、(0,0,150,150)にボタンが追加されるため、追加される新しいボタンは前のボタンの上に表示されます。要約されたコードのせいでこれを見ているのかもしれませんが、それについて何かしたいかもしれません。2. UITapgesturerecognizer では、タップされたビュー (id) が表示されます。それをセレクターで使用する必要があります。のように: doubletap.view.tag

于 2013-02-07T21:11:06.543 に答える