Есть ли способ перехватить действие UICalloutBarButton в Theos? Нужно подключить кнопку вставки в iOS для выполнения пользовательской функции - PullRequest
0 голосов
/ 06 мая 2019

Мне нужно подключить метод действия 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
...