0

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

4

5 回答 5

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
                   }
         }
     }

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

于 2012-08-17T10:48:50.537 回答
1

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

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

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

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

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

我强烈建议您找到有关MVC 工作原理的好教程。


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

于 2012-08-17T11:16:14.503 回答
0

你应该这样做:

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

我建议你阅读 Objective-c 的基本介绍(苹果开发者库非常好!或者如果你想要一本书,我强烈推荐Stephen Kochan 的书

于 2012-08-17T10:18:52.437 回答
0

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

于 2012-08-17T10:21:29.420 回答
0

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

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

-(void)action:(CustomButton*)btn{
      NSLog(@"%d %@", [btn tag], btn.value); // assuming CustomButton is a derived class of UIButton
}
于 2016-09-09T08:48:14.670 回答