2016-09-22 3 views
0

я это ниже метод делегата, который принимает 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 типа" ошибка.

Так кто знает, как передать параметр строки другому методу с помощью селектора кнопок?

+0

Возможный дубликат [Приложить параметр к действию button.addTarget в Swift] (http://stackoverflow.com/questions/24814646/attach-parameter-to-button-addtarget-action-in-swift) –

+2

объявить глобальную переменную и присвоить значение внутри вашего метода. –

+0

@AnuradhS Да, мне кажется, что мне нужно использовать глобальную переменную, хотя я стараюсь избегать этого, поскольку мой код довольно сложный. Благодаря! – SanitLee

ответ

1

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

  • (идентификатор) performSelector: (SEL) aSelector withObject: (идентификатор) объекта;

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

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


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

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

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^