Как передать строковый параметр другому методу через селектор кнопок?

У меня есть следующий метод делегата, который получает 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».

Итак, кто-нибудь знает, как передать строковый параметр другому методу через селектор кнопок?


person SanitLee    schedule 22.09.2016    source источник
comment
Возможный дубликат Прикрепить параметр к действию button.addTarget в Swift   -  person Bista    schedule 22.09.2016
comment
объявите глобальную переменную и присвойте значение внутри вашего метода.   -  person Chanaka Anuradh Caldera    schedule 22.09.2016
comment
@AnuradhS да, мне кажется, что я могу использовать глобальную переменную, хотя я стараюсь избегать этого, поскольку мой код довольно сложный. Спасибо!   -  person SanitLee    schedule 22.09.2016


Ответы (2)


Если вы используете PerformSelector для вызова функции, вы можете использовать этот вариант

  • (id) PerformSelector: (SEL) aSelector withObject: (id) объект;

Документация

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


Вы также можете проверить этот ответ, где объясняется другое решение, на мой взгляд, вероятно, более сложное, но полезное.

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

person David Velarde    schedule 22.09.2016

Для функции объекта UIControl 1-й параметр имеет тип идентификатора, передается самим элементом управления, вы получаете объект uibutton в качестве параметра в sendStickerPreviewButtonPressed: функция, которая не может быть преобразована в строку, поэтому вы получили ошибку. Вы можете передать строку, расширив класс UIbutton по своему усмотрению. класс . затем кнопку «Создать» вашего собственного класса, и вы получите кнопку отправителя пользовательской формы свойства.

     -(void)sendStickerPreviewButtonPressed:(mycustomButton*)sender{
      //sender.myCustomString
}
person Mohammad Arifuzzaman    schedule 22.09.2016