如何通过按钮选择器将字符串参数传递给另一个方法?

时间:2016-09-22 04:34:04

标签: ios objective-c uibutton performselector

我有以下委托方法,接收 stickerURLString 作为输入:

- (void)selectedSticker:(NSString *)stickerURLString {
    //...
        [self.stickerPreviewButton addTarget:self action:@selector(sendStickerPreviewButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    //...
}

选择器调用此方法 sendStickerPreviewButtonPressed

- (void)sendStickerPreviewButtonPressed: (NSString *)stickerURLString {
    [self.delegate InputFunctionView:self sendSticker:stickerURLString];
}

正如您所看到的,为了使这项工作符合预期,我必须将 stickerURLString selectedSticker 方法传递给 sendStickerPreviewButtonPressed

我试过这个:

[self.stickerPreviewButton performSelector:@selector(sendStickerPreviewButtonPressed:) withObject:stickerURLString];

而不是:

[self.stickerPreviewButton addTarget:self action:@selector(sendStickerPreviewButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

但是我得到了“以NSException类型的未捕获异常终止”错误。

所以任何人都知道如何通过按钮选择器将字符串参数传递给另一个方法?

2 个答案:

答案 0 :(得分:1)

如果您使用performSelector来调用该函数,那么您可以使用此变体

  • (ID)performSelector:(SEL)aSelector        withObject:(ID)对象;

<强>文档

https://developer.apple.com/reference/objectivec/1418956-nsobject/1418764-performselector

您还可以查看此答案,其中解释了另一种解决方案,在我看来可能更复杂但更有用

https://stackoverflow.com/a/14161831/1502070

答案 1 :(得分:0)

对于UIControl对象函数,第一个参数是id类型,通过控件本身,你得到uibutton对象作为sendStickerPreviewButtonPressed中的参数:不能转换为字符串的函数,所以你得到一个错误,你可以传递字符串通过扩展UIbutton类由您的自定义类。然后创建您自己的类的按钮,anr为您获取自定义属性表单发件人按钮。

     -(void)sendStickerPreviewButtonPressed:(mycustomButton*)sender{
      //sender.myCustomString
}