登录注册页面:
该页面比较简单,直接使用Xib搭建即可.有几个点需要需要注意:
1.底部的快速登录按钮,图片在上面,文字在下面,只需自定义按钮,重新布局内部的子控件即可.
- (void)setup
{
//文字居中
self.titleLabel.textAlignment = NSTextAlignmentCenter;
}
//通过代码创建
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self setup];
}
return self;
}
//通过xib创建
- (void)awakeFromNib
{
[super awakeFromNib];
[self setup];
}
//重新布局子控件
- (void)layoutSubviews
{
[super layoutSubviews];
// 调整图片
self.imageView.x = 0;
self.imageView.y = 0;
self.imageView.width = self.width;
self.imageView.height = self.imageView.width;
// 调整文字
self.titleLabel.x = 0;
self.titleLabel.y = self.imageView.height;
self.titleLabel.width = self.width;
self.titleLabel.height = self.height - self.titleLabel.y;
}
2.中间输入框:当光标聚焦时,占位文字显示为白色,光标离开时,占位文字为浅灰色.此处自定义textField,通过KVC,设置占位文字的颜色.
static NSString * const LXXPlacerholderColorKeyPath = @"_placeholderLabel.textColor";
- (void)awakeFromNib
{
[super awakeFromNib];
// 设置光标颜色和文字颜色一致
self.tintColor = self.textColor;
// 不成为第一响应者
[self resignFirstResponder];
}
/**
* 当前文本框聚焦时就会调用
*/
- (BOOL)becomeFirstResponder
{
// 修改占位文字颜色
[self setValue:self.textColor forKeyPath:LXXPlacerholderColorKeyPath];
return [super becomeFirstResponder];
}
/**
* 当前文本框失去焦点时就会调用
*/
- (BOOL)resignFirstResponder
{
// 修改占位文字颜色
[self setValue:[UIColor grayColor] forKeyPath:LXXPlacerholderColorKeyPath];
return [super resignFirstResponder];
}
那么如何知道textField的占位文字的颜色这个属性呢?可以通过runtime的一些方法获取某个类的所有属性.
+ (void)getIvars
{
unsigned int count = 0;
// 拷贝出所有的成员变量列表
Ivar *ivars = class_copyIvarList([UITextField class], &count);
for (int i = 0; i<count; i++) {
// 取出成员变量
// Ivar ivar = *(ivars + i);
Ivar ivar = ivars[i];
// 打印成员变量名字
NSLog(@"%s %s", ivar_getName(ivar), ivar_getTypeEncoding(ivar));
}
// 释放
free(ivars);
}
3.点击注册账号按钮时,登陆框和注册框互相切换.
只需在XIB中设置相应的约束即可:设置注册框和登录框顶部对齐,等高等宽,然后注册框的左边粘着登录框的右边.通过改变登录框距离屏幕右边的距离约束即可.
- (IBAction)registerBtnClick:(UIButton *)sender {
// 退出键盘
[self.view endEditing:YES];
if (self.loginLeftConstraint.constant == 0) {
self.loginLeftConstraint.constant = -self.view.width;
sender.selected = YES;
}else {
self.loginLeftConstraint.constant = 0;
sender.selected = NO;
}
[UIView animateWithDuration:0.25 animations:^{
[self.view layoutIfNeeded];
}];
}