0

我对 UILabel 进行了子类化,并添加了 2 个如下所示的属性:

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

然后我实现了 UIView 的触摸开始方法,如下所示:

- (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);,然后使用操作并将其传递给第二个选择器[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 回答