UI界面自定义

更新时间:2016/12/13 访问次数:36584

云账号界面自定义

1. 定制范围概述

界面定制包括:

  • 控件样式
  • 界面布局
  • 新增控件以及为新增控件绑定事件
  • 在现有控件事件发生前或者发生后加入自己的操作(AOP)

2. 详细说明

SDK开放了所有xib组件,每个xib对应相应的功能页,用户可以按需加载,并在保证云账号交互逻辑的基础上修改任意上述XIB,改变布局、调整控件的样式、新增控件

image

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的的点击事件为例:

  • 在ALBBOpenAccountFindPwdViewController.xib添加一个Button,此处的title叫“我是自定义的Button”,然后,添加一个如图所示的Object控件到xib里:


  • 接下来把刚才添加的Object控制器和File’sOwner(ViewController)预留的的outletCollection连线,
    具体操作:先点击File‘Owner,点住outletCollection后面的+号,将鼠标从如图所示的右下角拖到左上角

这里的outletCollection是一个NSArray,它是可以关联多个Object的

@property (nonatomic, strong) IBOutletCollection(NSObject)? NSArray *outletCollection;
  • 如图新建一个名字叫CustomController的类,这个类继承NSObject,设置刚才添加的Objec控制器的class为CustomController

  • 在上面新建的CustomController中添加一个IBAction响应函数

    -(IBAction)CustomButtonClick {
        NSLog(@"来自 Custom Button 的Click");
    }
  • 然后将Button的点击事件和CustomController的连线,选择刚才添加的IBAction,拖拽之后会出现之前添加的函数CustomButtonClick,选择它作为点击Button的响应函数

  • 最后运行,找到当前CustomController点击该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

最后结合注册成功的回调,就能获取用户的注册密码

FAQ

关于此文档暂时还没有FAQ
返回
顶部