iOS组件化开发实战记录

2020-01-21 07:54:41王振洲

以下是在组件库中加载nib文件/图片文件的所有情况:


/**
 从主工程mainBundle或从所有的组件(组件名.framework)中加载图片

 @param imageName 图片名称
 @return 返回查找的图片结果
 */
+ (UIImage *_Nullable)loadImageNamed:(NSString *_Nonnull)imageName;

/**
 从指定的组件中加载图片,主要用于从当前组件加载其他组件中的图片

 @param imageName 图片名称
 @param frameworkName 组件名称
 @return 返回查找的图片结果
 */
+ (UIImage *_Nullable)loadImageNamed:(NSString *_Nonnull)imageName frameworkName:(NSString *_Nonnull)frameworkName;

/**
 从指定的组件的Bundle文件夹中加载图片,主要用于从当前组件加载其他组件Bundle文件夹中的图片

 @param imageName 图片名称
 @param bundleName Bundle文件夹名
 @param frameworkName 组件名称
 @return 返回查找的图片结果
 */
+ (UIImage *_Nullable)loadImageNamed:(NSString *_Nonnull)imageName bundleName:(NSString *_Nonnull)bundleName frameworkName:(NSString *_Nonnull)frameworkName;

/**
 从主工程mainBundle的指定Bundle文件夹中去加载图片

 @param imageName 图片名称
 @param bundleName Bundle文件夹名
 @return 返回查找的图片结果
 */
+ (UIImage *_Nullable)loadImageNamed:(NSString *_Nonnull)imageName bundleName:(NSString *_Nonnull)bundleName;

/**
 从指定的组件(组件名.framework)中加载图片
 说明:加载组件中的图片,必须指明图片的全名和图片所在bundle的包名

 @param imageName 图片名称
 @param targetClass 当前类
 @return 返回查找的图片结果
 */
+ (UIImage *_Nullable)loadImageNamed:(NSString *_Nonnull)imageName targetClass:(Class _Nonnull)targetClass;

/**
 从指定的组件(组件名.framework)中的Bundle文件夹中加载图片
 说明:加载组件中的图片,必须指明图片的全名和图片所在bundle的包名

 @param imageName 图片名称
 @param bundleName Bundle文件夹名
 @param targetClass 当前类
 @return 返回查找的图片结果
 */
+ (UIImage *_Nullable)loadImageNamed:(NSString *_Nonnull)imageName bundleName:(NSString *_Nonnull)bundleName targetClass:(Class _Nonnull)targetClass;

/**
 加载工程中的nib文件
 eg:[_tableview registerNib:[WDLoadResourcesUtil loadNibClass:[WDRepaymentheaderView class]] forHeaderFooterViewReuseIdentifier:kWDRepaymentheaderView]
 @param class nib文件名
 @return 返回所需要的nib对象
 */
+ (UINib *_Nullable)loadNibClass:(NSObject *_Nonnull)targetClass;

控制器加载方式:


@implementation WDBaseViewController

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
 NSString *classString = [[NSStringFromClass(self.class) componentsSeparatedByString:@"."] lastObject];
 if ([[NSBundle bundleForClass:[self class]] pathForResource:classString ofType:@"nib"] != nil) {
 //有xib
  return [super initWithNibName:classString bundle:[NSBundle bundleForClass:[self class]]];
 }else if ([[NSBundle mainBundle] pathForResource:classString ofType:@"nib"] == nil) {
 //没有xib
 return [super initWithNibName:nil bundle:nibBundleOrNil];
 } else {
 return [super initWithNibName:(nibNameOrNil == nil ? classString : nibNameOrNil) bundle:nibBundleOrNil];
 }
}
@end