从 iOS SDK ViewController 获取响应
Get Response From iOS SDK ViewController
在 iOS 中创建 SDK 很新。任何人都可以在以下情况下帮助我。
我有一个 SDK,它有 3 个视图控制器,在单独的 NavigationController 中一个接一个打开。屏幕 A、屏幕 B 和屏幕 C.
来自我正在合并我的 SDK 的客户端应用程序。我会有一个按钮,它会显示包含在 UInavigationController 中的我的 SDK 控制器。 (我将初始化 Screen A Controller,然后将其作为 rootviewcontroller 包含在 uinavigationcontroller 中)
由于导航控制器中的第一个控制器将是屏幕 A,因此它将有两个按钮。一个用于关闭 window,另一个用于转到下一个屏幕(屏幕 B)。
如果用户按下关闭按钮,我需要将响应发送到已按下关闭按钮的客户端应用程序。如果用户按下 NEXT Screen 按钮,那么屏幕 B 现在将出现在屏幕 B 上,我们有 3 个按钮,用于返回、关闭屏幕和转到下一个屏幕。如果用户按下屏幕 B 上的关闭按钮,那么我想关闭呈现的控制器并再次通知客户端应用程序 SDK 控制器 window 已关闭。第三个屏幕也是如此。
我有一个选项可以在每个控制器等中嵌入委托,但我需要一些更专业和好的想法来为我的 SDK 实现这个东西。请指导我的想法和最好的方法。我的语言是 OBJECTIVE-C.
谢谢
如果每个控制器中的委托对你来说不够好,你可以只使用一个转换委托并检查传入和传出视图控制器。
或者,如果您使用故事板,则根本不需要委托,只需在您的 segue 函数中执行与客户端应用程序相关的调用即可。
想了很多。我想出了以下想法,当我实施它时,它就像一个魅力。如果有人也遇到这种情况,请分享。
- 在您的 SDK 中创建一个单独的协议 Class 文件(仅限 .h 文件)。将其命名为您想要命名的代表。 (同时在您的 SDK 中制作 class public)
- 在该头文件中声明必需或可选的方法。
- 在每个控制器中创建 id delagete 实例。例如,在控制器 A、B 和 C 中都会有该实例。
- 当用户尝试将 SDK 集成到他的应用程序中并尝试从他的客户端应用程序加载控制器 A 时,还要求用户将其委托设置为 self 并在他的客户端应用程序视图控制器中实现所需的方法。
- 在 SDK 中,当您从控制器 A 移动到 B,从 B 移动到 C 并继续将 self.delegate 传递给下一个控制器时。 (这不会创建单独的实例,而只是将一个委托指向所有其他控制器 - 因此不会出现内存或性能问题)
- 现在,当您尝试从任何具有不同值的控制器 A、B 或 C 等调用 [self.delegate yourMethodName:@"abc"] 时,它只会指向 mainController,其中代表被设置为自己。
这就是实现它的方法,您不需要在不同的控制器中创建不同的 delegates/protocols。您可以将一个额外的参数传递给委托方法,该方法可以表示该委托来自哪个控制器 return.
谢谢
在 iOS 中创建 SDK 很新。任何人都可以在以下情况下帮助我。
我有一个 SDK,它有 3 个视图控制器,在单独的 NavigationController 中一个接一个打开。屏幕 A、屏幕 B 和屏幕 C.
来自我正在合并我的 SDK 的客户端应用程序。我会有一个按钮,它会显示包含在 UInavigationController 中的我的 SDK 控制器。 (我将初始化 Screen A Controller,然后将其作为 rootviewcontroller 包含在 uinavigationcontroller 中)
由于导航控制器中的第一个控制器将是屏幕 A,因此它将有两个按钮。一个用于关闭 window,另一个用于转到下一个屏幕(屏幕 B)。
如果用户按下关闭按钮,我需要将响应发送到已按下关闭按钮的客户端应用程序。如果用户按下 NEXT Screen 按钮,那么屏幕 B 现在将出现在屏幕 B 上,我们有 3 个按钮,用于返回、关闭屏幕和转到下一个屏幕。如果用户按下屏幕 B 上的关闭按钮,那么我想关闭呈现的控制器并再次通知客户端应用程序 SDK 控制器 window 已关闭。第三个屏幕也是如此。
我有一个选项可以在每个控制器等中嵌入委托,但我需要一些更专业和好的想法来为我的 SDK 实现这个东西。请指导我的想法和最好的方法。我的语言是 OBJECTIVE-C.
谢谢
如果每个控制器中的委托对你来说不够好,你可以只使用一个转换委托并检查传入和传出视图控制器。
或者,如果您使用故事板,则根本不需要委托,只需在您的 segue 函数中执行与客户端应用程序相关的调用即可。
想了很多。我想出了以下想法,当我实施它时,它就像一个魅力。如果有人也遇到这种情况,请分享。
- 在您的 SDK 中创建一个单独的协议 Class 文件(仅限 .h 文件)。将其命名为您想要命名的代表。 (同时在您的 SDK 中制作 class public)
- 在该头文件中声明必需或可选的方法。
- 在每个控制器中创建 id delagete 实例。例如,在控制器 A、B 和 C 中都会有该实例。
- 当用户尝试将 SDK 集成到他的应用程序中并尝试从他的客户端应用程序加载控制器 A 时,还要求用户将其委托设置为 self 并在他的客户端应用程序视图控制器中实现所需的方法。
- 在 SDK 中,当您从控制器 A 移动到 B,从 B 移动到 C 并继续将 self.delegate 传递给下一个控制器时。 (这不会创建单独的实例,而只是将一个委托指向所有其他控制器 - 因此不会出现内存或性能问题)
- 现在,当您尝试从任何具有不同值的控制器 A、B 或 C 等调用 [self.delegate yourMethodName:@"abc"] 时,它只会指向 mainController,其中代表被设置为自己。
这就是实现它的方法,您不需要在不同的控制器中创建不同的 delegates/protocols。您可以将一个额外的参数传递给委托方法,该方法可以表示该委托来自哪个控制器 return.
谢谢