【问题标题】:Objective-C - Passing Multiple ParametersObjective-C - 传递多个参数
【发布时间】:2012-08-13 18:53:53
【问题描述】:

所以到目前为止,我只会通过按钮标签传递我需要的任何参数。但是现在我已经将标签用于其他用途,因此当您选择按钮时,我需要能够将另一个字符串和带有标签的计时器值传递给 void 或某种动作。

这是我当前用于将按钮标签传递给操作的按钮代码(如下)

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

这是我传递给它的空白或动作。

-(void)action:(UIButton*)btn{
NSLog(@"%d", [btn tag]);
}

那么有没有一种方法可以让我不仅仅将按钮标签(如字符串)传递给操作?所以我可以有这样的东西。

-(void)action:(UIButton*)btn :myString{
NSLog(@"%d %@", [btn tag], myString);
}

编辑: 所以现在多亏了这个建议,我的 void 看起来像这样

-(void)actionWithButton:(UIButton *)btn andString:(NSString *)myString{
NSLog(@"%d %@", [btn tag], myString);
}

但我仍然不知道如何在按钮的@selector 部分传递 myString 参数。

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案1】:

    您可以将 UILable 作为子视图添加到该按钮,例如

     UILabel *lblValue = [[UILabel alloc]initWithFrame:CGRectMake(0,0,0,0)];
     lblValue.tag=2;
     lblValue.text = myString;
     [objInputButton addSubview:lblValue];
    

    然后你在你的 Action 方法中得到你的字符串,如下所示

      -(void)action:(UIButton*)btn
         {
         for(UILabel *lable in [btn subViews])
             {
                  if([lable tag]==2)
                       {
                             //get your string from lable
                       }
             }
         }
    

    编辑:- 我的这个答案是在我开始我的职业生涯时发布的,即使它完成了工作,它也是传递数据的不好方式,所以,最好遵循我发布的其他答案。

    【讨论】:

    • 这看起来可能是我正在寻找的答案,但是在 for 循环中我得到“没有可见的 @interface for 'UIButton' 声明选择器'subViews'”编辑 糟糕,我在子视图中添加了大写 V - 现在已修复
    • @Mattigins,是的,这是解决问题的一种方法。 :) 但实际情况是:那个你添加到UILabel的字符串在你创建UIButton已经存在了,所以没有必要添加它到UIButton,因为您可以从之前将字符串添加到UIButton 的那个对象中读取信息......但这只是对整个MVC模型的简单误解。
    【解决方案2】:

    this document 是您了解如何将操作发布到目标的良好开端。

    你可以看到目标选择器只能是三个不同的:

    - (IBAction)action;
    - (IBAction)action:(id)sender;
    - (IBAction)action:(id)sender forEvent:(UIEvent *)event;
    

    你不能接收任何其他类型的参数,因为你只是一个接收者,你不会调用这些方法

    我很确定您为什么要在调用任何字符串时“通过”(您的意思是:接收)任何字符串。用户交互指示何时让它们被调用,并且在调用这些方法中的任何一个时,您必须拥有足以响应用户请求的所有数据。一个简单的用户点击不会创建任何您需要接收的额外字符串,但您会获得有关触摸事件的信息。

    我强烈建议您找到一个关于MVC 工作原理的好教程


    但是,您可以通过UIButtontag 属性发布一个简单的NSInteger 值,当您创建UIButton 时,您可以设置它的tag,并且您可以在何时读取tag执行其中一种方法。

    【讨论】:

      【解决方案3】:

      你应该这样做:

      -(void)actionWithButton:(UIButton *)button andString:(NSString *)myString{
          //code
      }
      

      我建议你阅读objective-c 的基本介绍(apple developer library 非常好!或者如果你想要一本书,我强烈推荐Stephen Kochan's book

      【讨论】:

      • 我想,他想回答如何将其他参数传递给actionEvent。这个答案似乎并不想要。
      • 好的,我明白了,但是如何从按钮将字符串传递给“myString”?
      • 啊,我误解了你的问题。
      【解决方案4】:

      如果 UIButton 的类型是自定义的,您可以有一个带有文本的图像。然后按钮的 titleLabel 属性可以用于文本。

      【讨论】:

        【解决方案5】:

        如果您唯一的要求是在事件(touchupinside)调度时从按钮中检索一些标签以外的信息,那么您可以子类化 UIButton,然后分配您想要与按钮一起使用的任何信息,以便您以后可以获取它.

        可能你可以像下面这样使用

        -(void)action:(CustomButton*)btn{
              NSLog(@"%d %@", [btn tag], btn.value); // assuming CustomButton is a derived class of UIButton
        }
        

        【讨论】:

          猜你喜欢
          • 2010-10-17
          • 1970-01-01
          • 2011-09-30
          • 1970-01-01
          • 2023-03-13
          • 2021-12-29
          • 2016-06-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多