博文

【转】常用正则表达式

一、校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 8 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$ 9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$ 11 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$ 12 非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$ 13 非负整数:^\d+$ 或 ^[1-9]\d*|0$ 14 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$ 15 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ 16 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ 17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ 19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ 二、校验字符的...

CAGradientLayer的使用方法

需要说明几点, 1、frame的零点的计算方式是绝对frame不是相对frame。 2、frame的位置要放倒index:0。 3、frame的color数组的颜色是平均分布的。 CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame = CGRectMake(.....); gradient.colors = [NSArray arrayWithObjects:(id)[UIColor colorWithRed:0 green:0 blue:0 alpha:0].CGColor,(id)[UIColor colorWithRed:0 green:0 blue:0 alpha:0.2].CGColor, (id)[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5].CGColor, nil]; [_imgview.layer insertSublayer:gradient atIndex:0];

Storyboard的segue的登录跳转逻辑处理

图片
在纯代码中进行页面切换大部分情况下只需要 push modal 这种切换方式即可完成需求。 但是在Storyboard中,切换页面变成了segue,如果单纯的从按钮按住control然后连线到别的ViewController中,会导致按钮点下去就会跳转页面,无法处理登陆逻辑。 解决方法: 从源ViewController中,选择上面的这个,按住control,拖动连线到新的ViewController中,即可建立ViewController之间的segue跳转。然后设置这个segue的segue Identifier, 然后在需要跳转的按钮事件中,加入:[self performSegueWithIdentifier:@"segueXXX" sender:self]; 即可。

Storyboard把鼠标箭头放到圆点上不显示对应控件的解决方法

其实我也不知道具体是怎么解决的。。用CleanMyMac把XCode重置一下就好了。。缺点是账号啥的都要重新登录。。

隐藏NavigationBar下面的线(也许是阴影?)

首先 我们定义个属性 @property (nonatomic, strong)UIImageView *contentLineImageView; 然后写一个方法: - (UIImageView *)findHairlineImageViewUnder:(UIView *)view { if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) { return (UIImageView *)view; } for (UIView *subview in view.subviews) { UIImageView *imageView = [self findHairlineImageViewUnder:subview]; if (imageView) { return imageView; } } return nil; } //然后在viewdidload中调用这个方法 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. _contentLineImageView = [self findHairlineImageViewUnder:self.navigationController.navigationBar]; self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:37/255.0 green:195/255.0 blue:149/255.0alpha:1.0f]; //这句话 要写上。 默认是YES可能你得到的颜色与实际的不匹配。 默认为YES 说明是有透明度的。 self.navigationController.navigationBar.translucent = NO; } //我们还需要在viewwillappear 和view...

有关layer的CATransform3DMakeScale与frame的关系

如果先设置了父view的frame,又设置了Scale,再想用autolayout来通过frame.height约束view,需要做的是offset = frame.height/scale 这个转换,否则和预想的会出现差异(scale在捣鬼)

成员变量和属性的差别(转)

本质上来讲,属性也会帮你定义一个成员变量,并根据属性的声明自动生成getter/setter 方法,其中setter 方法根据属性(property)的属性(attribute)来提供不同的内存管理策略。 简单翻译一个SO的答案: Why would you use an ivar? ,展开说一下成员变量的好处。 封装 如果成员变量是private,程序中的其它对象很难直接访问该成员变量。如果是属性,相对更容易用父类方法读写属性。 性能 成员变量地址可以根据实例的内存地址偏移寻址。而属性的读写都需要函数调用,相对更慢。 非基础类型 对于复杂的C++类型,往往设为成员变量更合适,也许这种类型不支持copy,或者完全复制很麻烦。 多线程 多线程环境下,为保证数据一致性,在需要同步执行的代码段更应该使用成员变量。如果对需要同步更新的数据用getter/setter 方法,数据更新效率低,会带来更多的获取锁请求失败。 程序正确性 成员变量可以做直观的内存管理。属性可以一层层继承,还可以复写。容易出错。 二进制文件的体积 默认用属性,会生成不必要的getter/setter 方法,程序体积会变大。