ios - 将参数传递给 addTarget :action:forControlEvents

我正在像这样使用 addTarget:action:forControlEvents:

[newsButton addTarget:self
action:@selector(switchToNewsDetails)
forControlEvents:UIControlEventTouchUpInside];

我想将参数传递给我的选择器“switchToNewsDetails”。 我成功做的唯一一件事是通过编写(id)发件人:

action:@selector(switchToNewsDetails:)

但我正在尝试传递整数值等变量。这样写是行不通的:

int i = 0;
[newsButton addTarget:self
action:@selector(switchToNewsDetails:i)
forControlEvents:UIControlEventTouchUpInside];

这样写也不行:

int i = 0;
[newsButton addTarget:self
action:@selector(switchToNewsDetails:i:)
forControlEvents:UIControlEventTouchUpInside];

任何帮助将不胜感激:)

最佳答案

action:@selector(switchToNewsDetails:)

您不要在此处将参数传递给 switchToNewsDetails: 方法。您只需创建一个选择器以使按钮能够在发生某些操作时调用它(在您的情况下进行修饰)。控件可以使用 3 种类型的选择器来响应 Action ,它们都具有预定义的参数含义:

  1. 无参数

    action:@selector(switchToNewsDetails)
    
  2. 有1个参数表示发送消息的控件

    action:@selector(switchToNewsDetails:)
    
  3. 用2个参数表示发送消息的控件和触发消息的事件:

    action:@selector(switchToNewsDetails:event:)
    

尚不清楚您究竟想做什么,但考虑到您想为每个按钮分配一个特定的详细信息索引,您可以执行以下操作:

  1. 为每个按钮设置一个等于所需索引的标签属性
  2. switchToNewsDetails: 方法中,您可以获得该索引并打开相应的详细信息:

    - (void)switchToNewsDetails:(UIButton*)sender{
        [self openDetails:sender.tag];
        // Or place opening logic right here
    }
    

https://stackoverflow.com/questions/3988485/

相关文章:

objective-c - NSPredicate:按 NSDate 属性的日期过滤对象

objective-c - 如何使用 NSNotificationCenter 传递对象

objective-c - 如何在 iPhone 模拟器中更改时间和时区?

iphone - Storyboard - 引用 AppDelegate 中的 ViewContro

iphone - SplitView 就像 iPhone 上的 Facebook 应用程序

objective-c - 将空格序列折叠成单个字符并修剪字符串

iphone - 使用 Cocoa 和 Objective-C 理解引用计数

objective-c - 为什么 Objective-C 不支持私有(private)方法?

jquery - 你能在 iPad 上自动播放 HTML5 视频吗?

objective-c - 在框架模块中包含非模块化 header