前言今天隔上一篇博文已经差不多有一个月了,感觉非常羞愧,因为这意味着我特么将近一个月里面没有学到新知识。其实呢,不是这样子的,做项目过程中肯定有遇到问题,也有解决问题,但是就是没有长记性,说白了点,就没有记下来。今天洗澡的时候,突然又创建了一句座右铭“你可以蠢,但是不能懒;你可以懒,但是不能没有责任感。”作为一个经常刷技术微博的我,肯定会学在大牛的博客里面了解到一点东西。“先转后看”,这就是我的原则。其实,这种想法、做法是非常浪费时间的,因为我平均一天要刷将近半个多小时的微博,在项目中很有可能会遇到以前在微博中看到过的东西,但是你还要去找啊找。就前几天,同事要做类似于黄易导航栏点击切换栏目的效果,我记得我有看到过,果不其然在微博中找到了它WMPageController,但如果时间隔很久,那我岂不是要找很久,这就是浪费时间啊!以前转发微博的时候,会@我的印象笔记,当然这比较容易搜索,但是东西多了,你总得要花点时间去找到自己想要的那个东西。所以吧,“好记性,不如烂笔头”,古人的话总没错。这又让我想起了我们家那边的老话,“出门带好下雨伞”,然后然后我就想起了前天周五湿身的感觉,fuck!!!幸亏有好心同事救济我。前几天在cc上面看到一篇文章如何坚持每周写一篇博客,个人觉得写地挺好的,一想到自己隔这么久没有写博客了,就感到非常羞愧,所以吧,要坚持!因为你是男人嘛。好了,废话了这么久,实在不像是一个程序猿,下面来扯扯这周所学到的新技巧。 怎么获取View所在的Controller?当然这里不是指Controller的View属性这么简单。有的时候,你会遇到这样的需求:控制器顶部有两个按钮,点击切换不同的界面。这种效果实现的方法有很多,而我的做法是ViewController + ScrollView + View & View。而View上面的跳转事件,你可以定义block、delegate、notification来操作,但是如果我想在View里面获取Controller里面的某个属性呢?我可以在View里面定义一个Controller类型的对象啊,没错这就是我以前的做法,很傻逼!其实有更好的方法Given a view, how do I get its viewController?。
6 k0 w, n+ Z9 r# c1 O - /**0 ^- U* O Y. r) i* ^3 ]
- * 获取View所在的控制器9 }/ P& E1 ?1 a" k
- *
+ ~) p. C& d- t4 \9 ]2 y( [* i Q$ V - * @return <#return value description#>$ t; q" Y% e, o; U( u
- */
8 e `% t! A! p9 p9 @/ S7 o1 F% H - - (BaseViewController *)viewController {. R) w2 Z$ Y* o8 T
- UIResponder *responder = self;
y) B$ {6 O1 t, t6 s7 K* `# E1 p - while ([responder isKindOfClass:[UIView class]]) {1 I* Q4 n0 f% H# l
- responder = [responder nextResponder];7 T) _- H# V1 e0 m. S
- }
y2 y6 s/ _; _ B9 p+ C' h - return (BaseViewController *)responder;
4 ^8 g+ l9 _# h4 Y - }
复制代码 Label不用 addSubView: 方法加载Image?在cell里面,在A状态下Z区域要显示文字,在B状态下Z区域要显示图片。这我得两个控件啊,在config data的时候根据状态来显示或隐藏某个控件。诶,label可不可以加载Image啊?嗯,在UILabel的文件里面肯定有属性的,于是command+F “Image”,诶,我去,没找到?!于是又把UILabel的头文件里面的东东扫了一次,还是没有。好吧,后面在so搜到了,label真的可以不用 addSubView: 方法加载image,不过是在iOS7上,像我们支持iOS6的苦逼dog还是老老实实的用两个控件的方法吧。
" {9 u! W; G. K" }% {% m7 { - NSTextAttachment *attachment = [[NSTextAttachment alloc] init];3 C! n1 o, S: C5 j/ M
- attachment.image = [UIImage imageNamed:@"MyIcon.png"];
: L7 c* O0 G0 \
- i* L0 b/ Q9 }+ T- NSAttributedString *attachmentString = [NSAttributedString attributedStringWithAttachment:attachment];
" L9 X& ]( D$ @. f* e& b8 b3 y! h1 t - % d+ ^% ^ B; _6 a l& ]1 k$ ~/ d6 o
- NSMutableAttributedString *myString= [[NSMutableAttributedString alloc] initWithString:@"My label text"];
: P% F5 p8 ]/ |9 S* K5 @, J( b8 q - [myString appendAttributedString:attachmentString];# T4 V% o- i. g& Z
- 4 E+ y- u1 o- B! w/ }
- myLabel.attributedText = myString;
复制代码 如何简单的收键盘?我们可以自定义textfield或者textview子类,在初始化的时候设置它的inputAccessoryView属性,在它这个属性上面添加一个响应resignFirstResponder事件的按钮。可是有时候,你还得点击空白处也收键盘啊,可以在View上面添加一个手势啊,在相应手势的方法里面,让这个对象调用它的resignFirstResponder方法。如果在这个View上面UITextField对象很多个呢?那我肯定不会傻得一个个对象去调用resignFirstResponder方法啊,尽管第一响应者只能有一个,我以前觉得写了个很nice的方法:
2 ^9 m }8 |; z% G - /**2 S0 @# e) v) Y& j% ^- S) ^
- * 放弃第一响应者7 f/ W# \0 k& T' v9 m1 R
- *
E; u- z5 {/ g - * @param view view description2 K& S& J5 b+ N. v1 v% `: K, W
- */# `7 W( {3 I4 b7 G$ c& F( K
- - (void)resignAllFirstResponder:(UIView *)view {, V4 t: ?" \% ^
- for (UIView *subView in view.subviews) {8 Z, l! u$ @9 `5 H- W/ t3 `6 w
- if ([subView isKindOfClass:[UITextView class]] || [subView isKindOfClass:[UITextField class]]) {+ x: K4 ~5 }; P+ Y, m9 p) x3 |
- [subView resignFirstResponder];
4 j0 [. \" q; I& q- ^2 i, i- S - } else {0 Z4 u2 `9 J9 y2 M. d5 g
- [self resignAllFirstResponder:subView];3 Q5 P. h4 X& `2 l
- }: l1 C" d9 F" x' }7 z: Z4 l
- }
5 h9 C) R$ o! Y2 Y+ k - }
复制代码还尼玛用到了递归,大学的数据结构重要有点用处了。可是,自从我在so上面看到这个,: T7 d: ^" l9 \
- - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
" A2 s/ m% S% U - [[self view] endEditing:YES];
9 M. `6 P' U2 m7 _" U, i - }
复制代码我就。。。。肯定是苹果baba自家的方法好用撒!!! 怎么取出字符串中的URL?- NSDataDetector* detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
+ L" Z6 i/ S [ - NSArray* matches = [detector matchesInString:source options:0 range:NSMakeRange(0, [source length])];
复制代码 关于代码规范以前一个人开发的时候,代码想怎么写就怎么写,一副老子天下第一的样子。但是现在团队开发不同啊,一个项目几个人开发,还有code review,你得尽量写好,不能拖团队开发的后腿啊。所以,第一,你得写注释!写注释!!写注释!!!重要的事情说三遍。当然还有编程风格,这里我推荐两篇写的比较好的风格指南。 看完以后,你会发现原来网络请求写dict的时候,还可以这样:
8 q3 x0 e( I) h% J6 a7 ^7 M - [self.bodyParams setObject:link ?: @"" forKey:@"Link"];
复制代码调用block的时候,可以这样:8 @/ b: r& G' q& Z& t7 j
- !self.saveDataBlock ?: self.saveDataBlock(data);
复制代码 以前的一些杂东西有些东西是在以前的开发过程中记录的,但忘记是在哪里找到解决方案的了 - 如何查看.a文件信息? 在终端找到相关路径:lipo -info xxx.a ;也可以 file xxx.a; 还可以这么详细地看:lipo -detailed_info xxx.a;
- pod更新过慢? 你可以尝试下面的语句:pod install --verbose --no-repo-update 或者 pod update --verbose --no-repo-update
- 如何更形象化的理解约束constraints? 这里有个很形象的网站
- 想要找很多第三方工具? 这个你得找百度撒
- 旧的Xcode版本到哪里下载啊? 这个肯定找苹果baba啊,不过你得有开发者账号
- 想看历年wwdc的相关资料? 这个网站你肯定会喜欢(虽然我还没用过。。。。)
- 想看第三方源码? 这个想法好!很好!!非常好!!! 那么推荐你用UIViewController-Swizzled、YNClassName、DaiMethodTracing。请记得star!!!
- 你是个Google重度使用者? 推荐几款让Chrome新标签页炫酷的插件,希望你能喜欢。: |( W) @4 w3 I% I4 z
Google搜索技巧推荐上面说的东西,“不是我偷的,也不少我抢的,是我老乡从厂里面带出来的,现在便宜甩卖。。。”,(⊙o⊙)…,被这个促销口号洗脑了,这些都是我在网上找到。其实,个人觉得作为程序猿,你首先得善用网络资源,当然在吸取的时候,你也得付出、分享好的东西,共同促进一个美好的……姑且叫做“全球最大的同性交友世界”吧,这里我推荐一下Google的搜索技巧。当然你首先得学会FQ,如果你想要代理IP什么之类的,我可以给你一个网站Google全球缓存IP—中国红客联盟。当然,如果你想用着舒服,那肯定得用付费的撒,我用的是红杏(不好用,我也不会推荐给你撒),目前只支持Google浏览器,移动端的VPN还在内测中吧。& X) |& s& Y" ?2 n4 e
- Site: 只搜索某个网址的页面。 如:牛易疯先森 site:github.io
$ K0 j9 ^5 S5 v9 x1 l$ w - ~ 同时搜索近义词。 如:iOS webView ~crash$ a" R3 P& t* |' R5 d5 y
- - 排除某个关键字。 如:iOS webView crash –baidu
( O: S* E3 r6 G( {" P) P" f/ _( X - .. 显示指定年份时间段内搜索结果。如:apple 1995..2015
* l0 ^7 p' y& Z$ R6 N - “” 以整个短语为搜索关键字,而不是拆分成每个词。如:“iOS webView crash”,它和 iOS webView crash的搜索结果完全不一样。
& c" P2 V) n( N d: \9 ] - filetype: 指定搜索的文档类型。如:iOS filetype:pdf
+ J" i0 O+ i8 T1 i9 B3 M' S - * 星号用来代替任意字符,这个就像数据库的查询语句一样。如:*iOS7 g6 e1 _! X) H7 }9 w, @+ J/ H
- intitle: 只显示标题中包含指定关键字的搜索结果。如:intitle iOS
8 I- f( E4 c$ O. \( W) F5 g) O% I - define: 词句定义,如果你不知道这个词句什么意思,你就可以这么玩。 如:define:iOS
( y$ } M* h Q - 数学计算。如:(2015*7)/15+23-22
- b7 W4 K5 Z% D2 u! r! w - 单位换算。如:100人民币=? 美元
复制代码 小结昨晚三小时,今晚两小时。终于把平常积累的东东梳理一下,so nice!发现自己的印象笔记里面还是不少东西的,但整体水平不是很高,今天都是扯的一些东西的用法,没有深入研究某些东西,以后得多动动脑哈。。。 原文链接:http://joakimliu.github.io/2015/07/26/new-skill-in-this-week-one/ |