没有调用目标为 nil 的 UIButton 函数?

Posted

技术标签:

【中文标题】没有调用目标为 nil 的 UIButton 函数?【英文标题】:UIButton function with target nil doens´t get called? 【发布时间】:2011-05-15 12:22:21 【问题描述】:

我已经在我的视图控制器的 for 循环中制作了很多我自己的“CustomUIButton”。 在这个“CustomUIButton”类中,我实现了一个 UIGestureRecognizer,如下所示:

    (id)initWithFrame:(CGRect)frame 
    
        self = [super initWithFrame:frame];
        if (self) 

    // custom things.

     UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
            longPress.minimumPressDuration = 1.0;
            [self addGestureRecognizer:longPress];
            [longPress release];
    


    - (void) handleLongPress:(UILongPressGestureRecognizer*) recognizer

        if (recognizer.state == UIGestureRecognizerStateEnded) 
            NSLog(@"Long press Ended");
        
        else 

            NSLog(@"Long press detected.");
             // Do something
        
    

如果我用“self”初始化目标,我在这个类中的“handleLongPress”函数将被调用。这个很酷。如果我用“nil”初始化目标,它应该检查父视图控制器,对吗?

任何想法为什么不会调用我的视图控制器中具有相同名称的附加函数? (对于这个测试,我已经评论了按钮类的“长按”功能。)

【问题讨论】:

您使用的是什么平台和框架?从“NSLog”上的“NS”前缀和看起来像Objective-C的语法,我猜这是Mac的东西? 【参考方案1】:

在 UIGestureRecognizer 的 initWithTarget:action: 方法的文档中,对于 target 参数它说:

作为接收者的对象 接收方发送的动作消息 当它识别手势时。 nil 是 不是有效值。

注意最后一句话。

文档也这么说,这应该可以解释为什么它不起作用:

手势识别器不会 参与视图的响应者 链。

您必须为target 指定一个值。

【讨论】:

以上是关于没有调用目标为 nil 的 UIButton 函数?的主要内容,如果未能解决你的问题,请参考以下文章

添加 UIButton 目标时“类名没有成员函数名”

iOS UIButton在将背景图像设置为nil后消失

有没有办法将 lua 函数从 C++ 更改为 nil,例如 changefunction(thefunction) 并且在调用时变为 nil

无法让 UIButton 在 Swift 4 中调用代码块

学习Swift -- 可选链

在展开可选值 (UIButton) 时意外发现 nil