与UIButton一起动态发送字符串?

时间:2012-10-15 15:58:38

标签: ios xcode uibutton

我基本上想从我所在的方法发送一个已知的字符串:

    NSString *websiteString;
    if(a==0)
          websiteString = [[[NSString alloc] initWithString:@"www.google.com"] autorelease];

    else
          websiteString = [[[NSString alloc] initWithString:@"www.yahoo.com"] autorelease];

    UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
    aButton.frame = rct;

    // I get thrown in this next line: how do I initialize the Value for key?
    [aButton setValue:websiteString forKey:@"website"];
    [aButton addTarget:self action:@selector(clickedInsidePage:) forControlEvents:UIControlEventTouchUpInside];

回调函数,我可以在UIWebview中加载发送的字符串......

- (void)clickedInsidePage:(id)sender {

   NSString *websiteString = [[[NSString alloc] initWithString:[((UIControl *) sender) valueForKey:@"website"]] autorelease];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:[NSURL URLWithString:websiteString]];
    NSLog(@"visiting: %@",websiteString);
    .
    .
    .

    }

但是我收到一个错误,因为键/值实际上没有设置或初始化。

3 个答案:

答案 0 :(得分:2)

您不能使用setValue为不存在的键设置值。 UIButton没有名为“website”的属性,这就是您的代码崩溃的原因。 @Javy提供了一种可能的,良好的解决方案。

答案 1 :(得分:1)

你可以有一个字符串数组,然后给按钮标记属性索引。然后,您可以提取标记以获取字符串:

NSArray * someArray = // website strings added here

在if语句中,设置按钮以匹配索引:

aButton.tag = 0;

然后使用索引获取字符串:

string = [someArray objectAtIndex: ((UIButton*)sender).tag];

答案 2 :(得分:1)

您正在尝试在UIControl上使用字典方法。

还有其他更好的方法来获取对象,在你的情况下,一个字符串,在@ Javy的答案中提到的方法中。 但是,如果您必须为现有控件添加额外的属性,则必须对其进行子类化,并在子类中添加属性,您可以在操作中获取/设置该属性。