1

我在自定义表格视图单元格中有一个类似 facebook 的按钮。在我的 tableview 类中,我具有以下功能。

- (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

在苹果文档中,唯一可用的@selectorin 操作规范是以下方法:

- (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 的另一个答案中所述执行此操作,但我建议您创建一个自定义表格视图单元子类,该子类为shareStringand添加属性shareURL。这种方法将需要更多代码,但更容易阅读、维护并防止这种丑陋的 Obj-C 和 C 混淆。

于 2012-10-08T10:31:39.747 回答