我基本上想从我所在的方法发送一个已知的字符串:
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);
.
.
.
}
但是我收到一个错误,因为键/值实际上没有设置或初始化。
答案 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的答案中提到的方法中。 但是,如果您必须为现有控件添加额外的属性,则必须对其进行子类化,并在子类中添加属性,您可以在操作中获取/设置该属性。