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にロードできるコールバック関数へ...

-(void)clickedInsidePage:(id)sender {

   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 には「website」という名前のプロパティがないため、コードがクラッシュします。@Javy は、考えられる優れた解決策を 1 つ提供します。

于 2012-10-15T16:09:45.390 に答える
1

UIControl で辞書メソッドを使用しようとしています。

@Javyの回答で言及されているようなメソッドで、オブジェクト、あなたの場合は文字列をフェッチする他のより良い方法があります。ただし、既存のコントロールに追加のプロパティを追加する必要がある場合は、それをサブクラス化し、アクションで取得/設定できるサブクラスにプロパティを追加する必要があります。

于 2012-10-15T16:10:51.320 に答える
1

文字列の配列を使用して、ボタン タグ プロパティにインデックスを指定できます。次に、タグを抽出して文字列を取得できます。

NSArray * someArray = // website strings added here

if ステートメントで、インデックスに一致するようにボタンを設定します。

aButton.tag = 0;

次に、インデックスを使用して文字列を取得します。

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