// // KBAlert.h // keyBoard // // 系统 UIAlertController 的轻量封装:更易用、更健壮。 // 特性: // - 任意线程调用;内部切回主线程 // - 自动找到可展示的 VC(使用顶层 presented VC) // - Alert 队列:避免“正在展示时再次 present 失败”的崩溃/警告 // - iPad ActionSheet 自动设置 popover 锚点(无需关心 sourceView) // - 常见场景一行调用:提示/确认/输入框/操作表 // - 可选指定展示的 VC(如在 Extension 内) // #import NS_ASSUME_NONNULL_BEGIN typedef void (^KBAlertBoolHandler)(BOOL ok); typedef void (^KBAlertIndexHandler)(NSInteger index); typedef void (^KBAlertTextHandler)(NSString * _Nullable text, BOOL ok); @interface KBAlert : NSObject /// 指定一个缺省的“用于 present 的 VC”。 /// - 适用:App Extension 或自管理容器场景;App 内一般无需设置。 /// - 注意:弱引用;随时可被释放。 + (void)setDefaultPresenter:(nullable __kindof UIViewController *)presenter; #pragma mark - 简单提示(单按钮) /// 标准 OK 提示;按钮文案默认为“好”或“OK”。 + (void)showTitle:(nullable NSString *)title message:(nullable NSString *)message; /// 自定义按钮文案与回调。 + (void)showTitle:(nullable NSString *)title message:(nullable NSString *)message button:(nullable NSString *)button completion:(dispatch_block_t)completion; #pragma mark - 确认对话框(双按钮) /// 默认“取消/确定”按钮,回调 ok=YES 表示点击了确定。 + (void)confirmTitle:(nullable NSString *)title message:(nullable NSString *)message completion:(KBAlertBoolHandler)completion; /// 自定义按钮文案。 + (void)confirmTitle:(nullable NSString *)title message:(nullable NSString *)message ok:(nullable NSString *)okTitle cancel:(nullable NSString *)cancelTitle completion:(KBAlertBoolHandler)completion; /// 自定义“确定/取消”按钮颜色(为 nil 时使用系统默认) + (void)confirmTitle:(nullable NSString *)title message:(nullable NSString *)message ok:(nullable NSString *)okTitle cancel:(nullable NSString *)cancelTitle okColor:(nullable UIColor *)okColor cancelColor:(nullable UIColor *)cancelColor completion:(KBAlertBoolHandler)completion; #pragma mark - 输入框(单行) /// 带单个输入框;ok=YES 时返回输入内容。 + (void)promptTitle:(nullable NSString *)title message:(nullable NSString *)message placeholder:(nullable NSString *)placeholder ok:(nullable NSString *)okTitle cancel:(nullable NSString *)cancelTitle keyboardType:(UIKeyboardType)type configuration:(void (^ _Nullable)(UITextField *tf))config completion:(KBAlertTextHandler)completion; #pragma mark - 操作表(ActionSheet) /// 操作表;index 为点击项序号,按 actions 顺序从 0 开始;取消返回 -1。 + (void)actionSheetTitle:(nullable NSString *)title message:(nullable NSString *)message actions:(NSArray *)actions cancel:(nullable NSString *)cancelTitle destructiveIndex:(NSInteger)destructiveIndex // 传入 -1 表示无 fromView:(nullable UIView *)anchorView // iPad 可指定锚点;传 nil 自动居中 completion:(KBAlertIndexHandler)completion; @end NS_ASSUME_NONNULL_END