传递事件以外的参数& ID到@selector iOS

时间:2014-04-14 02:09:21

标签: ios dynamic arguments selector

我正在创建一个定义为here的iOS应用!所以在这个应用程序中,我使用分段控件(动态添加),以便用户选择其中一个选项。当用户选择一个选项时,我想将一个字符串发送到selector方法,所以我想知道我们是否可以将除id和event之外的任何内容发送到一个动作:@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)那样做吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我的方法是继承UISegmentedControl,比如MYUISegementedControl,并创建一个委托协议,以便它可以回拨给您UIViewController

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

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