• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 从 Objective-C 中的另一个类呈现 "Controller"

[复制链接]
菜鸟教程小白 发表于 2022-12-11 17:10:55 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

如何呈现另一个类的 UIAlertController?

我想知道如何在 UIAlertController 中捕获“确定”按钮的操作,该 Controller 是在 B 类中创建但在 A 类中呈现的。

这就是我如何从 ClassA 调用在类“ErrorHandler”上创建警报的方法:

ErrorHandler *handler = [[ErrorHandler alloc] init];
[self presentViewController:[handler alertWithInternetErrorCode] animated:YES completion:nil];

这是ErrorHandler.m中alertWithInternetErrorCode的实现:

- (UIAlertController *)alertWithInternetErrorCode{

    UIAlertController * alert = [UIAlertController
                                 alertControllerWithTitle"Error"
                                 message"No internet conneciton"
                                 preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction * cancel = [UIAlertAction
                              actionWithTitle"Cancel"
                              style:UIAlertActionStyleCancel
                              handler:^(UIAlertAction * action) {
                                  NSLog(@"cancelled");
                              }];

    [alert addAction:cancel];
    return alert;
}

再次,我想知道如何能够在其他类中创建这类对象,并且仍然能够在您调用它们的类中呈现它们。这包括捕捉他们的行为。在这种情况下,它将是“取消按钮”内的 NSLog 操作。 是否可以调用方法而不是 NSLog?假设一个委托(delegate)方法并导航回 A 类中的代码?



Best Answer-推荐答案


2 个选择:

最佳选择:

将 Controller 传递给方法,如下所示:- (UIAlertController *)alertWithInternetErrorCodeInPresenter: (UIViewController *) presenter

调用[presenter presentViewController: alert animated:YES completion:nil];

如果这不可能:

UIViewController *rootVC = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
[rootVC presentViewController:alert animated:YES completion:nil];

编辑——捕捉 Action :

- (void) presentAlertWithInternetErrorCodeInPresenterUIViewController<CustomAlertViewProtocol> *) presenter{

    UIAlertController * alert = [UIAlertController
                             alertControllerWithTitle"Error"
                             message"No internet connection"
                             preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction * cancel = [UIAlertAction
                          actionWithTitle"Cancel"
                          style:UIAlertActionStyleCancel
                          handler:^(UIAlertAction * action) {
                              [presenter cancelPressed];//Here's the key
                          }];

    [alert addAction:cancel];
    [presenter presentViewController: alert animated:YES completion:nil];
}

您必须在 ErrorHandler.h 文件中声明此协议(protocol):

@protocol CustomAlertViewProtocol
- (void) cancelPressed;
@end

现在在您想要使用此方法的任何 View Controller .h 文件中,您必须告诉编译器您正在遵循 CustomAlertViewProtocol:

@interface MyViewController : UIViewController <CustomAlertViewProtocol>

并且在.m中你必须实现协议(protocol)方法:

- (void) cancelPressed {
    //Do whatever you want
}

现在实际显示警报:

ErrorHandler *handler = [[ErrorHandler alloc] init];//Or whatever initializer you use
[handler presentAlertWithInternetErrorCodeInPresenter: self];

关于ios - 从 Objective-C 中的另一个类呈现 "Controller",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38771374/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap