BSBuDeJie_03
Posted 耍流氓的兔兔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BSBuDeJie_03相关的知识,希望对你有一定的参考价值。
一 快速登录
1 改变状态栏的style
- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
2 自定义按钮(图片在上,文字在下)
- (void)awakeFromNib { self.titleLabel.textAlignment = NSTextAlignmentCenter; } - (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; }
二 简单的登录框
三 xib中使用kvc
四 占位文字颜色 - 01
若使用某种属性,在Inspecter中找,否则转到头文件中寻找
改变内部的属性,通过属性或重写某种方法
1 使用富文本技术
//文字属性 NSMutableDictionary *attrs = [NSMutableDictionary dictionary]; attrs[NSForegroundColorAttributeName] = [UIColor grayColor]; //NSAttributedString:带有属性的文字(富文本技术) NSAttributedString *placeholder = [[NSAttributedString alloc] initWithString:@"手机号" attributes:attrs]; self.phoneField.attributedPlaceholder = placeholder;
2 可变属性
//NSMutableAttributedString:可变 NSMutableAttributedString *placeholder = [[NSMutableAttributedString alloc] initWithString:@"手机号"]; [placeholder setAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]} range:NSMakeRange(0, 1)]; self.phoneField.attributedPlaceholder = placeholder;
3 监听键盘弹出的两种方法
3.1 通过通知
3.2 通过textField的代理
五 占位文字:drawPlaceholderInRect - 02
自定义TextField
- (void)drawPlaceholderInRect:(CGRect)rect { [self.placeholder drawInRect:CGRectMake(0, 15, rect.size.width, 25) withAttributes:@{NSForegroundColorAttributeName : [UIColor grayColor], NSFontAttributeName : self.font}]; }
六 占位文字颜色 (运行时)runtime - 03
1 查找内部的成员变量 runtime
1.1 苹果官方一套C语言库, 能做很多底层操作(比如访问隐藏一些成员变量/成员方法...)
@interface BSTextField : UITextField { int _age; int num; } @end
- (void)awakeFromNib { unsigned int count = 0; Ivar *ivars = class_copyIvarList([self class], &count); for (int i = 0; i < count; i++) { //取出成员变量 Ivar ivar = *(ivars + i); BSLog(@"%s", ivar_getName(ivar)); } }
2
- (void)awakeFromNib { UILabel *placeholderLabel = [self valueForKeyPath:@"_placeholderLabel"]; placeholderLabel.textColor = [UIColor redColor]; }
- (void)awakeFromNib { // UILabel *placeholderLabel = [self valueForKeyPath:@"_placeholderLabel"]; // placeholderLabel.textColor = [UIColor redColor]; [self setValue:[UIColor grayColor] forKey:@"_placeholderLabel.textColor"];
//设置光标颜色和占位文字颜色一致
self.tintColor = [self.textColor;
}
3 代码整理
static NSString * const BSPlaceholderColorKeyPath = @"_placeholderLabel.textColor"; @implementation BSTextField //- (void)awakeFromNib //{ // unsigned int count = 0; // // Ivar *ivars = class_copyIvarList([UITextField class], &count); // for (int i = 0; i < count; i++) { // //取出成员变量 // Ivar ivar = *(ivars + i); // //打印成员变量的名字 // BSLog(@"%s", ivar_getName(ivar)); // } // // //释放 // free(ivars); //} - (void)awakeFromNib { // UILabel *placeholderLabel = [self valueForKeyPath:@"_placeholderLabel"]; // placeholderLabel.textColor = [UIColor redColor]; //修改占位文字颜色 // [self setValue:[UIColor grayColor] forKey:@"_placeholderLabel.textColor"]; //设置光标颜色和文字颜色一致 self.tintColor = self.textColor; //不成为第一响应者 [self resignFirstResponder]; } //当前文本框聚焦时 - (BOOL)becomeFirstResponder { //修改占位文字颜色 [self setValue:self.textColor forKeyPath:BSPlaceholderColorKeyPath]; return [super becomeFirstResponder]; } //当前文本框失去焦点时 - (BOOL)resignFirstResponder { //修改占位文字颜色 [self setValue:[UIColor grayColor] forKeyPath:BSPlaceholderColorKeyPath]; return [super resignFirstResponder]; }
七 注册框
1 清除按钮
2 控制间距约束实现滑动效果
/* 登录框距离控制器view左边的间距 */ @property (weak, nonatomic) IBOutlet NSLayoutConstraint *loginViewLeftMargin;
- (IBAction)showLoginOrRegister:(UIButton *)sender { //退出键盘 [self.view endEditing:YES]; if (self.loginViewLeftMargin.constant == 0) {//显示注册 self.loginViewLeftMargin.constant = - self.view.width; sender.selected = YES; }else{//显示登录 self.loginViewLeftMargin.constant = 0; sender.selected = NO; } [UIView animateWithDuration:0.25 animations:^{ [self.view layoutIfNeeded]; }]; }
八
九 推送界面
1 键盘类型
2 模拟器的键盘和电脑相连
3 判断是否第一次启动
获得当前软件版本号,通过当前软件的版本号和沙盒中存储的版本号相比,判断是否是初次打开
+ (void)show { //获得当前软件的版本号 NSString *key = @"CFBundleShortVersionString"; NSString *currentVersion = [NSBundle mainBundle].infoDictionary[key]; //获得沙盒中存储的版本号 NSString *sanboxVersion = [[NSUserDefaults standardUserDefaults] stringForKey:key]; if (![currentVersion isEqualToString:sanboxVersion]){//第一次打开当前版本 UIWindow *window = [UIApplication sharedApplication].keyWindow; BSPushGuideView *guideView = [BSPushGuideView guideView]; guideView.frame = window.frame; [window addSubview:guideView]; //存储版本号 [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:key]; [[NSUserDefaults standardUserDefaults] synchronize]; } }
4 若点击图片某一范围有效果,可用按钮覆盖上去
十
十一 顶部标签内容
1 白色半透明的背景色
UIView *titlesView = [[UIView alloc] init]; //白色半透明 titlesView.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5]; titlesView.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5]; titlesView.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.5]; titlesView.width = self.view.width; titlesView.height = 35; titlesView.y = 64; [self.view addSubview:titlesView];
2 顶部的标签栏
//内部的子标签 NSArray *titles = @[@"全部", @"视频", @"声音", @"图片", @"段子"]; CGFloat width = titlesView.width / titles.count; CGFloat height = titlesView.height; for (NSInteger i = 0; i < titles.count; i++) { UIButton *button = [[UIButton alloc] init]; button.height = height; button.width = width; button.x = i * width; [button setTitle:titles[i] forState:UIControlStateNormal]; [button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; button.titleLabel.font = [UIFont systemFontOfSize:14]; [titlesView addSubview:button]; }
3 标签栏底部的指示器
//底部的红色指示器 UIView *indicatorView = [[UIView alloc] init]; indicatorView.backgroundColor = [UIColor redColor]; indicatorView.height = 2; indicatorView.y = titlesView.height - indicatorView.height; [titlesView addSubview:indicatorView]; self.indicatorView = indicatorView;
- (void)titleClick:(UIButton *)button { [UIView animateWithDuration:0.25 animations:^{ self.indicatorView.width = button.width; self.indicatorView.centerX = button.centerX; }]; }
十二 标签的选中和动画
1 选中
//修改按钮颜色 self.selectedButton.selected = NO; button.selected = YES; self.selectedButton = button;
2 防止一个标签重复被点 - Disabled
[button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateDisabled];
//修改按钮颜色 防止标签重复被点 self.selectedButton.enabled = YES; button.enabled = NO; self.selectedButton = button;
3 默认点击第一个按钮
//默认点击第一个按钮 if (i == 0) { [self titleClick:button]; }
4 强制布局
[button layoutIfNeeded];//强制布局(强制更新子控件的frame)
十三 显示子控制器
十四
十五 子控制器显示
1 系统自动创建的控制器的内边距默认是20
//取出子控制器 UITableViewController *vc = self.childViewControllers[index]; vc.view.x = scrollView.contentOffset.x; vc.view.y = 0;//设置内边距为0 其默认为20
2 设置滚动条的内边距
//滚动条的内边距 vc.tableView.scrollIndicatorInsets = vc.tableView.contentInset;
十六 加载文字帖子数据
将数据写入文件
[responseObject writeToFile:@"/Users/chenxiaolei/Desktop/duanzi.plist" atomically:YES];
以上是关于BSBuDeJie_03的主要内容,如果未能解决你的问题,请参考以下文章