传递事件以外的参数&;@iOS选择器的ID

传递事件以外的参数&;@iOS选择器的ID,ios,dynamic,arguments,selector,Ios,Dynamic,Arguments,Selector,我正在创建定义的iOS应用程序!因此,在这个应用程序中,我使用分段控件(动态添加)让用户选择其中一个选项。当用户选择一个选项时,我想向selector方法发送一个字符串,因此我想知道除了id和event之外,是否可以向我们添加的action:@selector发送任何内容 这是密码 NSArray *optionsArray =[NSArray arrayWithArray:qna2.answers]; UISegmentedControl *segmentedControl = [[UISeg

我正在创建定义的iOS应用程序!因此,在这个应用程序中,我使用分段控件(动态添加)让用户选择其中一个选项。当用户选择一个选项时,我想向selector方法发送一个字符串,因此我想知道除了id和event之外,是否可以向我们添加的action:@selector发送任何内容

这是密码

NSArray *optionsArray =[NSArray arrayWithArray:qna2.answers];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:optionsArray];
segmentedControl.frame = CGRectMake(xOffset,yOffset, 250, 50);
[segmentedControl setSelectedSegmentIndex:UISegmentedControlNoSegment];
[self.view addSubview:segmentedControl];
yOffset+=100;

[segmentedControl addTarget:self action:@selector(MyAction:) forControlEvents: UIControlEventValueChanged];

那么我们可以像@selector(Myaction:Category)那样做吗?

您最好的选择可能是将字符串存储在如下属性中:

@property (nonatomic, copy) NSString *myString;
然后,在
myAction:
方法中检索该值

或者,您可以对控件进行子类化,并通过以下方式添加属性:

@interface MySegmentedControl : UISegmentedControl

@property (nonatomic, copy) NSString *stringProperty;

@end
设置每个分段控件时:

MySegmentedControl *segmentedControl = [[MySegmentedControl alloc] initWith...];
segmentedControl.stringProperty = @"Some meaningful value";
[segmentedControl addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventValueChanged];
在更改处理程序中:

- (void) myAction:(MySegmentedControl *)sender
{
    NSString *importantString = sender.stringProperty;
    // do stuff with importantString
}

我的方法是子类化
UISegmentedControl
,比如说
myuisegmentedcontrol
,并创建一个委托协议,以便它可以回调到您的
UIViewController

创建
MYUISegmentedControl
实例时,您可以添加所需的任何其他属性并将此信息传递回代理,或者至少您的代理可以通过
MYUISegmentedControl
属性访问这些属性


您也可以使用类别而不是子类。

我将添加10个问题,每个问题都属于一个特定类别,因此当触摸特定的segmentedcontrol时,我希望该方法知道该问题属于哪个类别?。。。在这个场景中,我该如何做呢?多亏了@Zev,我可以通过向segmentedcontrol添加属性accessibilityHint来解决这个问题。我的意思是将值存储在类中的属性中,而不是存储在segmentedcontrol中。像这样重载现有属性是一种不好的做法-如果以后需要使用
accessibilityHint
来达到预期目的,该怎么办?屏幕上会显示许多分段控件,如果您能举例说明类属性如何帮助我确定激活了哪个分段控件,我将不胜感激?。。我必须提醒您,我不熟悉iOS和objective-c…哦,将
myString
属性从
strong
更改为
copy
,这是具有可变子类(如
NSString
NSMutableString
)的类型属性的最佳实践,以防您稍后传入的字符串发生突变。我还添加了一个子类化代码的示例。