【问题标题】:IBAction connected with button but need a voidIBAction 与按钮连接但需要一个 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 一个动作可以连接到方法。

标签: objective-c ios interface-builder ibaction


【解决方案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。 ;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    相关资源
    最近更新 更多