界面定制包括:
SDK开放了所有xib组件,每个xib对应相应的功能页,用户可以按需加载,并在保证云账号交互逻辑的基础上修改任意上述XIB,改变布局、调整控件的样式、新增控件
SDK开发了所有ViewController,以及每一个ViewController的UI控件的引用
@interface ALBBOpenAccountLoginViewController : ALBBOpenAccountBaseController @property (assign, nonatomic) BOOL isNeedBackButtonHidden; //预留的外挂引用 @property (nonatomic, strong) IBOutletCollection(NSObject) NSArray *outletCollection; // wrapper @property (weak, nonatomic) IBOutlet ALBBOpenAccountWrapperView *wrapperView; // form @property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightOfFormView; // username @property (weak, nonatomic) IBOutlet UILabel *usernameLabel; @property (weak, nonatomic) IBOutlet UITextField *usernameField; @property (weak, nonatomic) IBOutlet UIButton *historyButton; @property (weak, nonatomic) IBOutlet UITableView *historyView; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightOfHistoryView; // password @property (weak, nonatomic) IBOutlet UIView *passwordView; @property (weak, nonatomic) IBOutlet UILabel *passwordLabel; @property (weak, nonatomic) IBOutlet UITextField *passwordField; @property (weak, nonatomic) IBOutlet UIButton *visibleButton; // checkcode @property (weak, nonatomic) IBOutlet UIView *checkcodeView; @property (weak, nonatomic) IBOutlet UILabel *checkcodeLabel; @property (weak, nonatomic) IBOutlet UITextField *checkcodeField; @property (weak, nonatomic) IBOutlet UIImageView *checkcodeImageView; @property (weak, nonatomic) IBOutlet UIButton *refreshButton; // control @property (weak, nonatomic) IBOutlet UIButton *submitButton; @end
为了能定制ViewController的UI控件,SDK开放了每一个ViewController的生命周期回调,使用方式如下:
//设置一个登录界面的Delegate [ALBBService(ALBBOpenAccountUIService) setLoginViewDelegate:self];
云账号登录ViewController的生命周期回调点如下
@protocol ALBBOpenAccountLoginViewDelegate <NSObject> @optional - (void)loginViewDidLoad:(ALBBOpenAccountLoginViewController *) viewController; - (void)loginViewWillAppear:(ALBBOpenAccountLoginViewController *) viewController; - (void)loginViewDidAppear:(ALBBOpenAccountLoginViewController *) viewController; - (void)loginViewWillDisappear; - (void)loginViewDidDisappear; - (void)loginViewWillLayoutSubviews:(ALBBOpenAccountLoginViewController *) viewController; - (void)loginViewDidLayoutSubviews:(ALBBOpenAccountLoginViewController *) viewController; @end
可以在loginViewDidLoad这个回调方法里去定制UI控件和navigationItem等,例如:
- (void)loginViewDidLoad:(ALBBOpenAccountLoginViewController *) viewController{ viewController.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"login" style:UIBarButtonItemStyleDone target:nil action:nil]; }
2 错误提示toast
当发生业务错误,如密码错误时,SDK会显示半透明toast提示错误信息,如果业务方希望自己处理错误信息,可以设置回调。
[ALBBService(ALBBOpenAccountUIService) setHandleBizErrorCallback:^(NSString *errMsg) { [MyAlertView alert:errMsg]; }];
3 新增控件与事件自定义
在xib里添加一个Button后,一般需要关联ViewController的一个IBAction事件,但是SDK的ViewController并没有开放出实现,所以我们需要用其他方式来实现Button的事件处理。
下面以添加一个自定义button的的点击事件为例:
这里的outletCollection是一个NSArray,它是可以关联多个Object的
@property (nonatomic, strong) IBOutletCollection(NSObject)? NSArray *outletCollection;
在上面新建的CustomController中添加一个IBAction响应函数
-(IBAction)CustomButtonClick { NSLog(@"来自 Custom Button 的Click"); }
然后将Button的点击事件和CustomController的连线,选择刚才添加的IBAction,拖拽之后会出现之前添加的函数CustomButtonClick,选择它作为点击Button的响应函数
4 现有控件切入自定义的事件
以分步注册为例,增加获取密码的切入代码
@implementation ALBBOpenAccountSetPwdViewController (aspect) + (void)load { Method originalMethod = class_getInstanceMethod(self, @selector(submitPassword)); Method newMethod = class_getInstanceMethod(self, @selector(newSubmitPassword)); BOOL addMethod = class_addMethod(self, @selector(submitPassword), method_getImplementation(newMethod), method_getTypeEncoding(newMethod)); if (addMethod) { class_replaceMethod(self, @selector(newSubmitPassword), method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); } else { method_exchangeImplementations(originalMethod, newMethod); } } - (void)newSubmitPassword { //读取登录框内容 NSString *password = self.passwordField.text; [self newSubmitPassword]; } @end
最后结合注册成功的回调,就能获取用户的注册密码