0

誰かが UITableViewCell 内のボタンをクリックしたときに、次のコードを使用して関数を呼び出しています。残念ながら、ボタン領域の外でタッチが離された場合でも、コードは呼び出されます。(たとえば、ボタンに触れて、指をスライドさせてボタンから離しても、ボタンは引き続き動作します)。

なぜこれが起こるのか、またはこれを行う正しい方法は何ですか?おそらく私の問題は「addTarget」句にあると思いました-つまり、TouchUpInsideがボタン自体ではなくUITableViewを参照している可能性がありますか??

[cellPeriod.myButton1 addTarget:self action:@selector(buttonClickedStopWatch:) forControlEvents:UIControlEventTouchUpInside];
4

1 に答える 1

2

問題は UITableView とは関係ありません。

私たちの指はマウスではないので、おそらくAppleは意図的にそうしていると思います。Apple が作成したアプリを確認できますが、これにも問題があります。navigationBar の backItemButton が表示されます。

それを解決したい場合は、UIControl のメソッドで行うことができます。

 - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event; 

この点を確認するには、ボタンの矩形内かどうかを確認します。また、BOOL 値を追加して、セレクターを実行するかどうかを決定できます。

追加した:

#import "MyButton.h"

@implementation MyButton

- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint location = [touch locationInView:self];
    CGRect btnRect = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    if (CGRectContainsPoint(btnRect, location)) {
        self.tag=-1;
        return;
    }
    self.tag=-2;
}
@end
于 2012-07-20T13:47:27.970 に答える