Created
November 4, 2015 20:10
-
-
Save bendytree/5d87a1df51ea38d595c3 to your computer and use it in GitHub Desktop.
Easily show WKWebView alerts, prompts, and confirms
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// WKWebViewPanelManager.h | |
// | |
// A few helpers to easily show WKWebView alerts, confirms, and prompts. | |
// | |
// Created by Joshua Wright<@bendytree> on 11/4/15. | |
// | |
// License: MIT | |
// | |
// Inspired by: https://github.com/ShingoFukuyama/WKWebViewTips | |
// | |
// Usage: | |
/* | |
... | |
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler { | |
[WKWebViewPanelManager presentAlertOnController:self title:@"Alert" message:message handler:completionHandler]; | |
} | |
- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler { | |
[WKWebViewPanelManager presentConfirmOnController:self title:@"Confirm" message:message handler:completionHandler]; | |
} | |
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * __nullable result))completionHandler { | |
[WKWebViewPanelManager presentPromptOnController:self title:@"Prompt" message:prompt defaultText:defaultText handler:completionHandler]; | |
} | |
... | |
*/ | |
#import <Foundation/Foundation.h> | |
@interface WKWebViewPanelManager : NSObject | |
+ (void) presentAlertOnController:(nonnull UIViewController*)parentController title:(nullable NSString*)title message:(nullable NSString *)message handler:(nonnull void (^)())completionHandler; | |
+ (void) presentConfirmOnController:(nonnull UIViewController*)parentController title:(nullable NSString*)title message:(nullable NSString *)message handler:(nonnull void (^)(BOOL result))completionHandler; | |
+ (void) presentPromptOnController:(nonnull UIViewController*)parentController title:(nullable NSString*)title message:(nullable NSString *)message defaultText:(nullable NSString*)defaultText handler:(nonnull void (^)(NSString * __nullable result))completionHandler; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// WKWebViewPanelManager.m | |
// | |
// Created by Joshua Wright<@bendytree> on 11/4/15. MIT License. | |
// | |
#import "WKWebViewPanelManager.h" | |
@implementation WKWebViewPanelManager | |
+ (void) presentAlertOnController:(nonnull UIViewController*)parentController title:(nullable NSString*)title message:(nullable NSString *)message handler:(nonnull void (^)())completionHandler | |
{ | |
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; | |
[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { | |
completionHandler(); | |
}]]; | |
[parentController presentViewController:alertController animated:YES completion:^{}]; | |
} | |
+ (void) presentConfirmOnController:(nonnull UIViewController*)parentController title:(nullable NSString*)title message:(nullable NSString *)message handler:(nonnull void (^)(BOOL result))completionHandler | |
{ | |
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; | |
[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { | |
completionHandler(YES); | |
}]]; | |
[alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { | |
completionHandler(NO); | |
}]]; | |
[parentController presentViewController:alertController animated:YES completion:^{}]; | |
} | |
+ (void) presentPromptOnController:(nonnull UIViewController*)parentController title:(nullable NSString*)title message:(nullable NSString *)message defaultText:(nullable NSString*)defaultText handler:(nonnull void (^)(NSString * __nullable result))completionHandler | |
{ | |
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; | |
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { | |
textField.text = defaultText; | |
}]; | |
[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { | |
NSString *input = ((UITextField *)alertController.textFields.firstObject).text; | |
completionHandler(input); | |
}]]; | |
[alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { | |
completionHandler(nil); | |
}]]; | |
[parentController presentViewController:alertController animated:YES completion:^{}]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment