0

UILabel をサブクラス化し、次のような 2 つのプロパティを追加しました。

@property (nonatomic, assign) SEL action;
@property (nonatomic, assign) id target;

次に、UIView の touches begin メソッドを次のように実装しました。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    if ([target respondsToSelector:@selector(action)]) {
        [target performSelector:@selector(action) onThread:[NSThread mainThread] withObject:nil waitUntilDone:NO];
    }
}

サブクラス化された UILabel を含むクラス内で、次のようにターゲットとアクションを設定します。

    label.target = self;
    labek.action = @selector(myMethod);
    label.userInteractionEnabled = YES;

ラベルを含むクラスには実際にメソッド myMethod があるため、それに応答する必要があります。なぜそれができないのでしょうか?

ありがとう!

4

3 に答える 3

1

このようにアクションを設定してから、アクションlabel.action = @selector(myMethod);を使用して2番目のセレクターに渡し[target respondsToSelector:@selector(action)]ます。それは機能しません。

あなたはこれをしたい:

if ([target respondsToSelector:self.action]) {
    [target performSelector:self.action onThread:[NSThread mainThread] withObject:nil waitUntilDone:NO];
}

基本的に、ターゲットがそのセレクターに応答しないため、ifステートメントは失敗します。したがって、呼び出されることはありません。

于 2012-09-06T18:42:22.570 に答える
0

デバッグ コンソールにエラーが表示されますか?

どうですか

@selector(myMethod:) // with colon.

Objective C のセレクター

于 2012-09-06T18:38:23.207 に答える
0

ラベルがスーパービューの境界に含まれていることを確認してください

于 2012-09-06T18:39:33.280 に答える