1

カスタムテーブルビューセルにFacebookのようなボタンがあります。私のテーブルビューのクラスには、次の関数があります。

- (IBAction)sendLike:(id)sender
          WithString: (NSString *)shareString
              andUrl:(NSURL *)shareUrl{

          //Do all kinds of things


        [fbController setInitialText:shareString];
        [fbController addURL:shareUrl];
        [fbController setCompletionHandler:completionHandler];
        [self presentViewController:fbController animated:YES completion:nil];
    }
}

私のcellForRowAtIndexpathでは、次の方法でこのメソッドを呼び出そうとしています。

 NSString *shareString = video.name;
        NSURL *shareUrl = [NSURL URLWithString:video.url];
        [cell.facebook addTarget:self action:@selector(sendLike: WithString:shareString andUrl:shareUrl)
                 forControlEvents:UIControlEventTouchUpInside];

しかし、@ selectorに「:」を入れる必要があると不平を言っています。誰か助けてもらえますか?

前もって感謝します。

4

5 に答える 5

1

あなたはこのように試すことができます

cell.facebook.tag = indexPath.row.
    [cell.facebook addTarget:self action:@selector(sendLike:)
                     forControlEvents:UIControlEventTouchUpInside];

sendLikeイベントで

- (IBAction)sendLike:(id)sender
  {


        //if you want to fetch data from any list then try
        //UIButton *selectedButton = (UIButton*)sender;
        //data = [dataList objectAtIndex:selectedButton.tag];
        NSString *shareString = video.name;
        NSURL *shareUrl = [NSURL URLWithString:video.url];

        [fbController setInitialText:shareString];
        [fbController addURL:shareUrl];
        [fbController setCompletionHandler:completionHandler];
        [self presentViewController:fbController animated:YES completion:nil];
    }
于 2012-10-08T09:24:04.527 に答える
0

アップルのドキュメントにあるよう@selectorに、アクションで使用可能な仕様は次の方法のみです。

- (void)action;

- (void)action:(id)sender;

- (void)action:(id)sender forEvent:(UIEvent *)event;

ご覧のとおり、複数の引数があるため、セレクターはこれと一致しませんが、送信者のみidが許可されます。

解決策として、tagボタンにを設定し、セレクターで処理することができます。

于 2012-10-08T09:23:41.227 に答える
0

あなたのcellForRow://カスタム文字列をボタンに配線する

objc_setAssociatedObject(yourButton, "theKey", strText, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

ボタンハンドラーの場合:

NSString *str = objc_getAssociatedObject(sender, "theKey");

psはランタイムライブラリをインポートすることを忘れないでください: #import <objc/runtime.h>

于 2012-10-08T09:53:46.177 に答える
0

セレクターを間違った方法で呼び出したと思います。あなたは実際に書くべきです、

[cell.facebook addTarget:self action:@selector(sendLike: WithString: andUrl:)  
                                     forControlEvents:UIControlEventTouchUpInside];  

しかし、これはあなたのために引数を渡しません。引数を渡したい場合は、performSelectorのように 呼び出す必要があります

[self performSelector:@selector(sendLike: WithString: andUrl:) 
                                withObject: cell.facebook
                                withObject: shareString
                                withObject: shareUrl]; 

それがあなたの問題の解決に役立つことを願っています。

于 2012-10-08T10:20:30.253 に答える
0

問題は、セレクターの引数の数と種類が正しくないことです。次のスキームでのみターゲットを使用できます。

 - (void)action;
 - (void)action:(id)sender;
 - (void)action:(id)sender forEvent:(UIEvent *)event;

送信者(UITableViewCellクラスインスタンス)オブジェクトに情報を含める必要があります。Stasによる他の回答で説明されているようにそれを行うことができますが、とのプロパティを追加するカスタムテーブルビューセルサブクラスを作成することをお勧めしshareStringますshareURL。このアプローチではより多くのコードが必要になりますが、この醜いObj-CとCの混同を防ぎ、読みやすく、維持しやすくなります。

于 2012-10-08T10:31:39.747 に答える