gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:58:36 24 4
gpt4 key购买 nike

如何呈现另一个类的 UIAlertController?

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

这就是我如何调用在类 A 的“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;
}

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

最佳答案

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) presentAlertWithInternetErrorCodeInPresenter:(UIViewController<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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com