我有点被困在这里......以编程方式我正在创建一个小表单作为子视图。以编程方式我添加一个确认按钮并添加一个目标。但我希望能够将表单内容传递给选择器函数。这可能吗?看起来像这样:
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也会为空......对吗?有没有办法做到这一点?感谢...
答案 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。