提问人:DukeDu 提问时间:12/18/2020 最后编辑:DukeDu 更新时间:12/21/2020 访问量:314
如何在目标 C 中通过 @selector 函数传递参数?
How to pass a parameter by a @selector function in Objective C?
问:
- (IBAction)alertShow:(NSButton *)sender {
MHAlert* alert = [[MHAlert alloc]initWithMessageTitle:@"message" infoText:@"infoText" btnTitle:@"OK" target:self action:@selector(test:) secondBtnTitle:nil target:nil action:nil];
[alert runModal];
}
- (void)test:(void(^)(BOOL isSuccess))handler
{
if (handler) {
handler(YES);
}
else
{
handler(NO);
}
}
我想通过 @selector(test:) 传递一个参数,这是一个块类型参数, 我检查了test:方法中的处理程序,发现它不是零,当我按照代码显示时。 如果没有,我怎样才能将 nil 值传递给 test: 方法。
我不想使用 perform: 方法,或者在网上搜索后包装 mew 方法。
答:
2赞
DukeDu
12/21/2020
#1
在 initWithMessageTitle 实现中使用带有参数启动的 NSInvocation,然后调用。
- (instancetype)initWithMessageTitle:(NSString *)message infoText:(NSString *)info btnTitle:(NSString *)title target:(id)target action:(SEL)action secondBtnTitle:(NSString *)secondTitle target:(id)secondTarget action:(SEL)secondAction
{
NSMethodSignature *sig = [[target class] instanceMethodSignatureForSelector:action];
NSInvocation* invoc = [NSInvocation invocationWithMethodSignature:sig];
//[invoc setArgument: atIndex:2];
invoc.selector = action;
[invoc invokeWithTarget:target];
}
填写它并调用受 Cy-4AH 启发的调用。
评论
MHAlert
initWithMessageTitle
@selector
NSInvocation
invoke
perform:withObject:
id