ios uibutton添加目标,从同一视图传递给选择器参数

时间:2014-03-20 20:16:10

标签: ios objective-c xcode uibutton

我有点被困在这里......以编程方式我正在创建一个小表单作为子视图。以编程方式我添加一个确认按钮并添加一个目标。但我希望能够将表单内容传递给选择器函数。这可能吗?看起来像这样:

Details = [[UIView alloc]initWithFrame:CGRectMake(40, 20, 250, 300)];
Details.backgroundColor = [UIColor whiteColor];
Details.layer.cornerRadius = 5;
Details.alpha = 0;

UILabel *NameLabel = [[UILabel alloc]initWithFrame:CGRectMake(60, 25, 75, 20)];
[NameLabel setText:@"Place Name:"];
[NameLabel setFont:[UIFont systemFontOfSize:12]];
[Details addSubview:NameLabel];

UITextField *NameTV = [[UITextField alloc]initWithFrame:CGRectMake(135, 25, 110, 20)];
NameTV.borderStyle = UITextBorderStyleRoundedRect;
NameTV.font = [UIFont systemFontOfSize:12];
[Details addSubview:NameTV];

confirm = [[UIButton alloc]initWithFrame:CGRectMake(100, 250, 75, 40)];
[confirm setTitle:@"Set Marker" forState:UIControlStateNormal];
[confirm setTitleColor:[UIColor lightGrayColor] forState:UIControlStateHighlighted];
confirm.titleLabel.font = [UIFont systemFontOfSize:14];
[confirm setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];

[confirm addTarget:self action:@selector(confirmMarker://add text field data here) forControlEvents:UIControlEventTouchUpInside];
//attach an array to the button???
[Details addSubview:confirm];

- (void) confirmMarker:(NSString)someString{
    NSLog(@"%@", someString);
}

我的问题是在窗体视图形成时添加了目标...所以即使有人写了一些内容然后点击按钮,someString也会为空......对吗?有没有办法做到这一点?感谢...

2 个答案:

答案 0 :(得分:2)

也许我错过了一些东西,但如果你已经有权访问这个值,为什么还需要通过选择器?

- (void) confirmMarker:(NSString)someString{
    NSLog(@"%@", NameTv.text);
}

按钮的预设选择器将自己作为变量传递,因此它发送的是:

- (void) confirmMarker:(id)sender{
    // Sender is the button that sent
    NSLog(@"%@", NameTv.text);
}

要使用您自己的变量执行选择器,您必须执行以下操作:

IMP imp = [ob methodForSelector:selector];
void (*func)(id, SEL, NSString *) = (void *)imp;
func(ob, selector, @"stringToSend");

但是,如果你用按钮触发了它,你必须首先得到textView.text才能传递它,所以为什么不选择方法一,面向按钮标准回调:< / p>

- (void) confirmMarker:(id)sender {
    NSLog(@"%@", NameTv.text);
} 

答案 1 :(得分:1)

不,这是不可能的。选择器中的参数仅为发件人本身(在您的情况下为按钮)。因此,您必须将所需信息存储在其他地方,例如ivar。