2015_6_遇到的各种坑

RGB颜色转换

#define kUIColorFromRGB(rgbValue) [UIColor \

colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \

green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \

blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

vfl(简单实现)以及pickview的选中行高度(没找到)

cgfloat存id

[metrics setValue:[NSNumber numberWithFloat:SCREEN_HEIGHT] forKey:@"screenHiht"];

2015/6/11

导航下加载表,单元格向下偏移

self.automaticallyAdjustsScrollViewInsets = NO;


viewdidload   UI没有初始化,在layoutSubViews再次对frame设置

2015/6/12

todo:

setting页面加上和密保问题页面的pick view

侧边栏加上leftbarbtn图案

所有表的选种状态 设置为空 done

边框颜色

_textView.layer.borderColor = UIColor.grayColor.CGColor;

_textView.layer.borderWidth = 1;

_textView.layer.cornerRadius = 6;

_textView.layer.masksToBounds = YES;

2014/6/12

各种弹窗 !!

反馈页面 提交失败 本地存储

反馈页面 提交按钮增加判断

pickview改显示内容行数

2014/6/15

1.密保弹窗 pickview修改  和 密保问题设置页面一样

2.闪屏

3.有reset a password  -> Reset

有Password setting  -> Passcode


功能类似系统自带的Mail应用的多选删除功能。

 

  •    return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
  •   }

Release finger after finished

2045/6/18

判断邮箱格式是否正确的代码

-(BOOL)isValidateEmail:(NSString *)email

{

NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES%@",emailRegex];

return [emailTest evaluateWithObject:email];

}

对于输入框为空及输入参数只有空格的判断 ios

nilifreturntrue;

elseNSCharacterSetNSCharacterSet whitespaceAndNewlineCharacterSet];

NSStringstringByTrimmingCharactersInSet:set];

iflength0returntrue;

elsereturnfalse;

}

}

2015/6/23 导航栏 状态栏高度

// 状态栏(statusbar)

CGRect rectStatus = [[UIApplication sharedApplication] statusBarFrame];

NSLog(@"status width - %f", rectStatus.size.width); // 宽度

NSLog(@"status height - %f", rectStatus.size.height);   // 高度

// 导航栏(navigationbar)

CGRect rectNav = self.navigationController.navigationBar.frame;

NSLog(@"nav width - %f", rectNav.size.width); // 宽度

NSLog(@"nav height - %f", rectNav.size.height);   // 高度

2015/6/24

#import <UIKit/UIKit.h>

@interface NonCopyPasteField : UITextField

@end

—llll  13:59:21

#import "NonCopyPasteField.h"

@implementation NonCopyPasteField

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender

{

[[NSOperationQueue mainQueue] addOperationWithBlock:^{

[[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO];

}];

return [super canPerformAction:action withSender:sender];

}

@end

—llll  13:59:31

text 禁止复制

2015/6/27

//触屏响应事件

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

NSLog(@"开始触摸");

}

// Moved 移动

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

{

//    NSLog(@"拖拽触摸");

//首先把屏幕上所有的事件转换成触摸

UITouch *touch =[touches anyObject];

//从self.view上接受触摸焦点

CGPoint point =[touch locationInView:self.view];

//判断一下交互,确保点到Btnframe时才能让其选中

if (CGRectContainsPoint(btn.frame, point))

{

//改变btn状态,变为选中

}

}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

NSLog(@"结束触摸");

}//效果不好

215/6/29

//从字符串分割到数组- componentsSeparatedByString:

NSString *string = [[NSString alloc] initWithString:@"One,Two,Three,Four"];

NSLog(@"string:%@",string);

NSArray *array = [string componentsSeparatedByString:@","];

NSLog(@"array:%@",array);

2015/7/2  滑动手势 改变透明度

-(void) handlePanGesture:(UIPanGestureRecognizer *) sender {

CGFloat alpha = _lifeView.alpha - ([sender translationInView: [self view]].y)/320.0;

_lifeView.alpha = MAX(0, MIN(1, alpha));

}

pod install

实现所谓的genie effect。即点击最小化或删除按钮,视图会被吸进某个地方

键盘上移的实现

// 键盘自动收回

-(void)initUI

{

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnContentView:)];

[self.container addGestureRecognizer:tapGesture];

[self addKeyboardObserver];

contentFrame = self.frame;

}

- (void)addKeyboardObserver{

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(handleWillShowKeyboard:)

name:UIKeyboardWillShowNotification

object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(handleWillHideKeyboard:)

name:UIKeyboardWillHideNotification

object:nil];

}

- (void)handleWillShowKeyboard:(NSNotification *)notification

{

CGRect keyboardRect;

keyboardRect = [(notification.userInfo)[UIKeyboardFrameEndUserInfoKey] CGRectValue];

keyboardRect = [self convertRect:keyboardRect fromView:nil];

CGRect frame = contentFrame;

if (keyboardRect.size.height > kDialogButtomMargin) {

frame.origin.y -= (keyboardRect.size.height-kDialogButtomMargin);

[UIView animateWithDuration:0.25 animations:^{

[self setFrame:frame];

}];

}

}

- (void)handleWillHideKeyboard:(NSNotification *)notification

{

[UIView animateWithDuration:0.25 animations:^{

[self setFrame:contentFrame];

}];

}

导航字体设置

以后可以改变导航条标题颜色和字体

[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:

[UIColor colorWithRed:0 green:0.7 blue:0.8 alpha:1], UITextAttributeTextColor,

[UIColor colorWithRed:0 green:0.7 blue:0.8 alpha:1], UITextAttributeTextShadowColor,

[NSValue valueWithUIOffset:UIOffsetMake(0, 0)], UITextAttributeTextShadowOffset,

nil]];

其中 UITextAttributeTextColor和UITextAttributeFont 属性是文字颜色和字体

以后用tf的时候,tf的高度要比tf的字体大3,不然在tf内容满了以后,后续的tf内部的光标不会随着内容增加移动的

时间: 2024-10-13 15:50:42

2015_6_遇到的各种坑的相关文章

移动端点击事件全攻略,有你知道与不知道的各种坑

看标题的时候你可能会想,点击事件有什么好说的,还写一篇攻略?哈哈,如果你这么想,只能说明你too young to simple. 接触过移动端开发的同学可能都会面临点击事件的第一个问题:click事件的300ms延迟响应.不能立即响应给体验造成了很大的困扰,因此解决这个问题就成为了必然. 这个问题的解决方案就是: zepto.js的tap事件.tap事件可以理解为在移动端的click事件,而zepto.js因为几乎完全复制jQuery的api,因此常常被用在h5的开发上用来取代jquery.

[原创] 关于免费VPN我踩过的那些坑

关于免费VPN我踩过的那些坑 因为工作的关系,笔者经常需要用到VPN, 访问国外国网站,你懂的. 我曾经试着自己购买VPS搭建过VPN, 被封了后就没心情再维护了,毕竟直接买VPN比VPS便宜太多.时间一长,也就有了一些经验. 这里总结成表格的形式,分享给大家: [NydusVPN] 知乎推荐的香港VPN, 比直通车好,线路稳定性好,办公游戏适合.注册前7天内可以无条件退款哦.  官方网站  [Astrill] 老牌VPN,但近两年被封底得太厉害,现在已经不太给力了. 注册第一个月能免费使用(付

Linux下GDB调试与对拍(先挖个坑)

应为NOIP要复赛在NOI-Linux下编写程序,所以被迫选择Vim+Gdb(主要是Guide太丑了). 虽然GUIDE的调试功能已经对付大多数的调试,反正学一学GDB的使用也没什么坏处. 1 生成调试信息 要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中.使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点.如: gcc -g hello.c -o hello g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名.变量名,

Spring Cloud ZooKeeper集成Feign的坑2,服务调用了一次后第二次调用就变成了500,错误:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.n

错误如下: 2017-09-19 15:05:24.659 INFO 9986 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.spring[email protected]56528192: startup date [Tue Sep 19 15:05:24 CST 2017]; root of context hierarchy 2017-09-19 15:05:24.858 INFO 9986 --

小心掉入旧墙刷漆的五大“坑”

一些朋友的旧墙刷漆都是由自己一手包办,但墙面重新刷漆有好几个误区需要多加注意的.前期材料的选择.施工的准备以及施工的方法,这都是墙面重新刷漆的重要环节.在这些环节中,一不小心就会掉入误区,现在让我们看看有哪些是需要我们注意的. 第一点:过分在意墙面涂料的品牌 一些朋友认为购买墙面涂料一定要买知名品牌使用才好,当然知名品牌的涂料产品确实有一定的质量保障,但是并不是说我们要一味地追求品牌油漆.其实,市场上许多普通品牌的油漆与知名品牌的质量和粉刷效果相差无几,但是在价格上却有很大的差异.所以家装时,需

angular踩坑之路:初探webpack

之前费了一番力气安装好了angular开发环境,后面的几天都是在angular中文官网上看文档,照着英雄教程一步一步操作,熟悉了angular的一些基本特性,这部分没有遇到什么大问题,还比较顺利.这两天在看官方文档中的Webpack简介,想跟着文档做一遍,了解一下如何用Webpack打包angular项目,结果遇到了一些问题,因为是初学angular和Webpack的小白,这些问题一时难以解决,花费了不少时间,想在这里记录一下. 首先跟着文档将相关的文件都添加到项目中,目录是这样子的: 根据文档

谈谈Vagrant中的那些坑:CentOS

安装了vagrant之后,当然需要将它投入使用.由于计划中的生产环境是 CentOS 7,因此想搭建一个 基于CentOS 7(x86_64)的虚拟开发环境. 最开始的一系列工作,比如在vbox中安装CentOS 7.打包box文件.将box导入vagrant等都不在此一一细述,后面将有专文总结这些过程. 然后坑来了:修改Vagrantfile配置文件欲实现 public_network: config.vm.network "public_network", ip: "19

阿里云磁盘扩容踩坑总结

公司半年前上线一个新的项目,采购了一批阿里云主机,磁盘组成是40G系统盘+100G的数据盘,数据库采用MariaDB Galera Cluster集群部署,由于业务数据量快速增长,导致磁盘存储空间剩余量很少,急需要扩容,先总结整个项目规划中埋下的坑: 1.没有DBA对数据库的容量规划,而前期的运维人员采购时选用100G的SSD云盘: 2.数据库默认使用共享表空间,缺点是删除数据后不释放空间,当数据快速增长后,我们采取了先删除临时表数据的方式来尽量避免暴力扩容,争取在春节期间稳定,删除部分数据后,

跳入linux的第一个坑-因为安装Ubuntu导致的硬盘被误格的恢复.(记TestDisk使用记录)

不看废话,直接跳到操作说明 前几日心血来潮想把家中的旧笔记本换成Linux操作系统,算是在业余生活中正式投入Linux的怀抱.说干就干,发行版选择了Ubuntu,下载了Ubuntu16.04的ISO,下载软碟通,制作成U盘启动.恩,重启电脑,U盘引导,进入安装界面. 恩,安装界面挺炫酷啊,还检测到硬盘中安装的Win8,恩,问我是与其他系统共存还是清除并安装,既然都正式投入怀抱了,肯定只安装Ubuntu啊,Win8,拜拜了,恩,选第二个.下图是网上找的.请注意第二个选项的注意:..算了,我就是看到