TUICore.h 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. // Created by Tencent on 2023/06/09.
  2. // Copyright © 2023 Tencent. All rights reserved.
  3. /**
  4. * TUICore
  5. * This module is mainly responsible for data transfer, event notification and extension between TUI components.
  6. */
  7. #import <UIKit/UIKit.h>
  8. @protocol TUIServiceProtocol;
  9. @protocol TUIObjectProtocol;
  10. @protocol TUINotificationProtocol;
  11. @protocol TUIExtensionProtocol;
  12. @class TUIExtensionInfo;
  13. NS_ASSUME_NONNULL_BEGIN
  14. typedef void (^TUICallServiceResultCallback)(NSInteger errorCode, NSString *errorMessage, NSDictionary *param);
  15. #pragma mark - TUICore
  16. /////////////////////////////////////////////////////////////////////////////////
  17. //
  18. // Definition of TUICore, APIs
  19. //
  20. /////////////////////////////////////////////////////////////////////////////////
  21. @interface TUICore : NSObject
  22. + (void)registerService:(NSString *)serviceName object:(id<TUIServiceProtocol>)object;
  23. + (void)unregisterService:(NSString *)serviceName;
  24. + (nullable id<TUIServiceProtocol>)getService:(NSString *)serviceName;
  25. + (nullable id)callService:(NSString *)serviceName method:(NSString *)method param:(nullable NSDictionary *)param;
  26. + (nullable id)callService:(NSString *)serviceName
  27. method:(NSString *)method
  28. param:(nullable NSDictionary *)param
  29. resultCallback:(nullable TUICallServiceResultCallback)resultCallback;
  30. + (void)registerEvent:(NSString *)key subKey:(NSString *)subKey object:(id<TUINotificationProtocol>)object;
  31. + (void)unRegisterEventByObject:(id<TUINotificationProtocol>)object;
  32. + (void)unRegisterEvent:(nullable NSString *)key subKey:(nullable NSString *)subKey object:(nullable id<TUINotificationProtocol>)object;
  33. + (void)notifyEvent:(NSString *)key subKey:(nullable NSString *)subKey object:(nullable id)anObject param:(nullable NSDictionary *)param;
  34. + (void)registerExtension:(NSString *)extensionID object:(id<TUIExtensionProtocol>)object;
  35. + (void)unRegisterExtension:(NSString *)extensionID object:(id<TUIExtensionProtocol>)object;
  36. + (NSArray<TUIExtensionInfo *> *)getExtensionList:(NSString *)extensionID param:(nullable NSDictionary *)param;
  37. + (BOOL)raiseExtension:(NSString *)extensionID parentView:(UIView *)parentView param:(nullable NSDictionary *)param;
  38. // deprecated
  39. + (nullable NSDictionary *)getExtensionInfo:(NSString *)extensionID
  40. param:(nullable NSDictionary *)param __attribute__((deprecated("use getExtensionList:param: instead")));
  41. + (void)registerObjectFactory:(NSString *)factoryName objectFactory:(id<TUIObjectProtocol>)objectFactory;
  42. + (void)unRegisterObjectFactory:(NSString *)factoryName;
  43. + (nullable id)createObject:(NSString *)factoryName key:(NSString *)method param:(nullable NSDictionary *)param;
  44. @end
  45. #pragma mark - TUIRoute
  46. /////////////////////////////////////////////////////////////////////////////////
  47. //
  48. // Definition of TUIRoute, APIs
  49. //
  50. /////////////////////////////////////////////////////////////////////////////////
  51. typedef void (^TUIValueResultCallback)(NSDictionary *param);
  52. @interface NSObject (TUIRoute)
  53. @property(nonatomic, copy) TUIValueResultCallback navigateValueCallback;
  54. @end
  55. @interface UIViewController (TUIRoute)
  56. - (void)pushViewController:(NSString *)viewControllerKey param:(nullable NSDictionary *)param forResult:(nullable TUIValueResultCallback)callback;
  57. - (void)presentViewController:(NSString *)viewControllerKey param:(nullable NSDictionary *)param forResult:(nullable TUIValueResultCallback)callback;
  58. - (void)presentViewController:(NSString *)viewControllerKey
  59. param:(nullable NSDictionary *)param
  60. embbedIn:(nullable UINavigationController *)navigationVC
  61. forResult:(nullable TUIValueResultCallback)callback;
  62. @end
  63. #pragma mark - TUIService
  64. /////////////////////////////////////////////////////////////////////////////////
  65. //
  66. // Definition of TUIService, APIs
  67. //
  68. /////////////////////////////////////////////////////////////////////////////////
  69. @protocol TUIServiceProtocol <NSObject>
  70. @optional
  71. - (nullable id)onCall:(NSString *)method param:(nullable NSDictionary *)param;
  72. - (nullable id)onCall:(NSString *)method param:(nullable NSDictionary *)param resultCallback:(TUICallServiceResultCallback)resultCallback;
  73. @end
  74. @interface TUIServiceManager : NSObject
  75. + (instancetype)shareInstance;
  76. - (void)registerService:(NSString *)serviceName service:(id<TUIServiceProtocol>)service;
  77. - (void)unregisterService:(NSString *)serviceName;
  78. - (nullable id<TUIServiceProtocol>)getService:(NSString *)serviceName;
  79. - (nullable id)callService:(NSString *)serviceName
  80. method:(NSString *)method
  81. param:(nullable NSDictionary *)param
  82. resultCallback:(nullable TUICallServiceResultCallback)resultCallback;
  83. @end
  84. #pragma mark - TUIEvent
  85. /////////////////////////////////////////////////////////////////////////////////
  86. //
  87. // Definition of TUIEvent, APIs
  88. //
  89. /////////////////////////////////////////////////////////////////////////////////
  90. @protocol TUINotificationProtocol <NSObject>
  91. @optional
  92. - (void)onNotifyEvent:(NSString *)key subKey:(NSString *)subKey object:(nullable id)anObject param:(nullable NSDictionary *)param;
  93. @end
  94. @interface TUIEventManager : NSObject
  95. + (instancetype)shareInstance;
  96. - (void)registerEvent:(NSString *)key subKey:(NSString *)subKey object:(id<TUINotificationProtocol>)object;
  97. - (void)unRegisterEvent:(id<TUINotificationProtocol>)object;
  98. - (void)unRegisterEvent:(nullable NSString *)key subKey:(nullable NSString *)subKey object:(nullable id<TUINotificationProtocol>)object;
  99. - (void)notifyEvent:(NSString *)key subKey:(nullable NSString *)subKey object:(nullable id)object param:(nullable NSDictionary *)param;
  100. @end
  101. #pragma mark - TUIExtension
  102. /////////////////////////////////////////////////////////////////////////////////
  103. //
  104. // Definition of TUIExtension, APIs
  105. //
  106. /////////////////////////////////////////////////////////////////////////////////
  107. typedef void (^TUIExtensionClickCallback)(NSDictionary *param);
  108. @interface TUIExtensionInfo : NSObject
  109. @property(nonatomic, assign) NSInteger weight;
  110. @property(nonatomic, strong, nullable) UIImage *icon;
  111. @property(nonatomic, copy, nullable) NSString *text;
  112. @property(nonatomic, strong, nullable) NSDictionary *data;
  113. @property(nonatomic, copy, nullable) TUIExtensionClickCallback onClicked;
  114. @end
  115. @protocol TUIExtensionProtocol <NSObject>
  116. @optional
  117. - (nullable NSArray<TUIExtensionInfo *> *)onGetExtension:(NSString *)extensionID param:(nullable NSDictionary *)param;
  118. // If there exist responser, return YES
  119. - (BOOL)onRaiseExtension:(NSString *)extensionID parentView:(UIView *)parentView param:(nullable NSDictionary *)param;
  120. // deprecated
  121. - (nullable NSDictionary *)onGetExtensionInfo:(NSString *)extensionID
  122. param:(nullable NSDictionary *)param __attribute__((deprecated("use onGetExtension:param: instead")));
  123. @end
  124. @interface TUIExtensionManager : NSObject
  125. + (instancetype)shareInstance;
  126. - (void)registerExtension:(NSString *)extensionID extension:(id<TUIExtensionProtocol>)extension;
  127. - (void)unRegisterExtension:(NSString *)extensionID extension:(id<TUIExtensionProtocol>)extension;
  128. - (NSArray<TUIExtensionInfo *> *)getExtensionList:(NSString *)extensionID param:(nullable NSDictionary *)param;
  129. - (BOOL)raiseExtension:(NSString *)extensionID parentView:(UIView *)parentView param:(nullable NSDictionary *)param;
  130. // deprecated
  131. - (nullable NSDictionary *)getExtensionInfo:(NSString *)extensionID
  132. param:(nullable NSDictionary *)param __attribute__((deprecated("use getExtensionList:param: instead")));
  133. @end
  134. #pragma mark - TUIObjectFactory
  135. /////////////////////////////////////////////////////////////////////////////////
  136. //
  137. // Definition of TUIObjectFactory, APIs
  138. //
  139. /////////////////////////////////////////////////////////////////////////////////
  140. @protocol TUIObjectProtocol <NSObject>
  141. @optional
  142. - (nullable id)onCreateObject:(NSString *)method param:(nullable NSDictionary *)param;
  143. @end
  144. @interface TUIObjectFactoryManager : NSObject
  145. + (instancetype)shareInstance;
  146. - (void)registerObjectFactory:(NSString *)factoryName objectFactory:(id<TUIObjectProtocol>)objectFactory;
  147. - (void)unRegisterObjectFactory:(NSString *)factoryName;
  148. - (nullable id)createObject:(NSString *)factoryName method:(NSString *)method param:(nullable NSDictionary *)param;
  149. - (nullable id)createObject:(NSString *)method param:(NSDictionary *)param;
  150. @end
  151. NS_ASSUME_NONNULL_END