0

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

    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 中加载发送的字符串...

-(无效)clickedInsidePage:(id)发件人{

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

    }

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

4

3 回答 3

2

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

于 2012-10-15T16:09:45.390 回答
1

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

NSArray * someArray = // website strings added here

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

aButton.tag = 0;

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

string = [someArray objectAtIndex: ((UIButton*)sender).tag];
于 2012-10-15T16:06:41.513 回答
1

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

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

于 2012-10-15T16:10:51.320 回答