[英]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 。 如果沒有,我如何將 nil 值傳遞給test:方法。
我不想使用perform:方法,或者在網上搜索后包裝一個 mew 方法。
在 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 啟發的調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.