Мне нужно подключить метод действия UICalloutBarButton
или что-то в этом роде, чтобы выполнить настраиваемое действие, например, отобразить диалоговое окно, спрашивающее пользователя, хотят ли они вставить или нет в этом случае. Как бы я поступил так?
Я уже пытался использовать -(SEL)action
и -(void)fadeAndSend
безрезультатно, твик либо полностью зависает при открытии оповещения, либо я не могу позвонить %orig
(что необходимо, когда вы нажимаете «Да») .
@interface UICalloutBarButton : UIButton
-(void)pressesEnded:(id)arg1 withEvent:(id)arg2;
@end
%hook UICalloutBarButton
-(void)pressesEnded:(id)arg1 withEvent:(id)arg2 {
SEL actionSelector = MSHookIvar<SEL>(self, "m_action");
NSString *selectorName = NSStringFromSelector(actionSelector);
if ([selectorName isEqualToString:@"paste:"]) {
// If the selector name is paste
// Show a confirmation alert
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"PasteConfirm"
message: @"Do you really want to paste this?" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *yesAction = [UIAlertAction actionWithTitle:@"Yes" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
%orig;
[alert dismissViewControllerAnimated:YES completion:nil];
}];
UIAlertAction *noAction = [UIAlertAction actionWithTitle:@"No" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action){
[alert dismissViewControllerAnimated:YES completion:nil];
}];
[alert addAction:yesAction];
[alert addAction:noAction];
// Show the alert
UIViewController *viewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
[viewController presentViewController:alert animated:YES completion:nil];
}
else {
%orig;
}
}
%end