IBAction 与按钮连接但需要一个 void

Posted

技术标签:

【中文标题】IBAction 与按钮连接但需要一个 void【英文标题】:IBAction connected with button but need a void 【发布时间】:2012-01-07 07:44:09 【问题描述】:

我有 i IBAction,它与 .xib 中的一个按钮相连。但是对于一个动作需要这个代码;

- (void) reportScore: (int64_t) score forCategory: (NSString*) category 

    GKScore *scoreReporter = [[GKScore alloc] initWithCategory:category];   
    scoreReporter.value = counter;
    [scoreReporter reportScoreWithCompletionHandler: ^(NSError *error) 
     
         [self callDelegateOnMainThread: @selector(scoreReported:) withArg: NULL error: error];

         NSLog(@"Nice: %d", counter);  

     ];

有没有办法将我的按钮与 void 连接起来?或者类似的东西?

- (IBAction) subScore 
//data

【问题讨论】:

void 和 IBAction 是一回事。 IBAction 只是头文件的一个标记,告诉 IB 一个动作可以连接到方法。 【参考方案1】:

IBAction(and IBOutlet) 只是用来让 XCode 的 Interface Builder(IB) 知道有一个函数存在。如果你想使用void,可以,但是你不会得到 Interface Builder 中显示的功能。

IBAction 是一个特殊的关键字,仅用于告诉 Xcode(Interface Builder) 将方法视为目标-动作连接的动作。 IBAction 被定义为 void

IBOutlet 是一个特殊的关键字,仅用于告诉 Xcode(Interface Builder) 将对象视为出口。它实际上被定义为无,因此在编译时没有任何影响。

您可以将函数(使用void 定义,注意IBAction 也可以,但这里不需要)设置为您的按钮目标,如下所示:

[yourButton addTarget:self action:@selector(yourButtonFunction:) forControlEvents:UIControlEventTouchUpInside];

通常,如果您以编程方式创建代码(不使用 XCode 的 Interface Builder),则不再需要 IBOutletIBAction。 ;)

【讨论】:

以上是关于IBAction 与按钮连接但需要一个 void的主要内容,如果未能解决你的问题,请参考以下文章

IBAction 的不同触摸状态

当我连接 IBOutlet 时,IBAction 停止工作

如何禁用子视图上的 IBAction 按钮

带有 IBAction 的按钮导致“无法连接操作,目标类 NSNibExternalObjectPlaceholder 不响应 -action”错误

按钮 IBaction 连接显示未知符号和应用程序将异常无法识别的选择发送到实例

按下音量按钮时更改音量滑块位置