1. 對于系統(tǒng)UIButton設(shè)置富文本的坑
_submitButton.titleLabel.attributedText = [self creatAttributedString];
#有效
[_submitButton setAttributedTitle: [self creatAttributedString] forState:UIControlStateNormal];
為什么不能這樣呢官套,SDK說的很明確。
2. 避免多個(gè)UICollectionView 在一個(gè)View中
如果你在一個(gè)頁面中創(chuàng)建了多個(gè) UICollectionView 它們使用一套代理方法删咱,也許在每個(gè)代理方法中你對當(dāng)前的UICollectionView 做了判斷屑埋,使用了不用的數(shù)據(jù)源,可是你會(huì)發(fā)現(xiàn)還是有莫名其妙的Bug痰滋,而且往往這些Bug摘能,難以解釋。
正確的做法是: 如上圖的效果敲街,自定義一個(gè)包含一個(gè)Label 一個(gè)UICollectionView的視圖团搞,創(chuàng)建兩個(gè)對象即可,這樣可避免多個(gè)UICollectionView使用一套代理協(xié)議造成的莫名其妙的Bug多艇。
3. 限制輸入小數(shù)點(diǎn)兩位逻恐,超出限制范圍輸入不了
這也算一條路,與其最后彈框提示峻黍,不如不讓其輸入違法字符复隆。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (![textField isMemberOfClass:[OSTextField class]]) {
return NO;
}
NSMutableString * futureString = [NSMutableString stringWithString:textField.text];
[futureString insertString:string atIndex:range.location];
NSInteger flag=0;
const NSInteger limited = 2;
for (NSInteger i = futureString.length-1; i>=0; i--) {
if ([futureString characterAtIndex:i] == '.') {
if (flag > limited) {
return NO;
}
break;
}
flag++;
}
return YES;
}
4. Bool和bool 的不同之處
OC 中的BOOL 實(shí)際上是一種對帶符號的字符類型(signed char)的類型定義(typedef),它使用8位的存儲(chǔ)空間姆涩。通過#define指令把YES定義為1挽拂,NO定義為0。
注意:objective-c 并不會(huì)將BOOL作為僅能保存YES或NO值的真正布爾類型來處理骨饿。編譯器仍將BOOL認(rèn)作8位二進(jìn)制數(shù)亏栈,YES 和 NO 值只是在習(xí)慣上的一種理解。
問題:如果不小心將一個(gè)大于1字節(jié)的整型值(比如short或int)賦給一個(gè)BOOL變量宏赘,那么只有低位字節(jié)會(huì)用作BOOL值绒北。如果該低位字節(jié)剛好為0(比如8960,寫成十六進(jìn)制為0x2300)置鼻,BOOL值將會(huì)被認(rèn)作是0镇饮,即NO值蜓竹。
而對于bool類型箕母,只有true和false的區(qū)別储藐,即0為false,非0為true嘶是。
舉例:
BOOL b1=8960; // 實(shí)際是 NO钙勃, 因?yàn)?960換成十六進(jìn)制為0x2300,BOOL 只有8位存儲(chǔ)空間聂喇,取0x2300的低8位辖源,00,所以是NO
bool b2=8960希太;//實(shí)際是true克饶, 因?yàn)閎ool類型,非0即為true誊辉。
5. cellForRowAtIndexPath的崩潰問題
ReportTableViewCell *cell = [Tb cellForRowAtIndexPath:[NSIndexPath indexPathForRow:5 inSection:0]];
inSection 不帶就崩潰矾湃,這在表的刪除某行,插入某行是同樣適用堕澄。
6.Pop回來導(dǎo)航欄隱藏時(shí)出現(xiàn)上出現(xiàn)一片空白
方法1 [self.navigationController.navigationBar setHidden:YES];
方法2 [self.navigationController setNavigationBarHidden:YES];
方法3 [self.navigationController setNavigationBarHidden:YES animated:YES];
使用第三種方法邀跃,就不會(huì)出現(xiàn)返回時(shí)一片空白的情況了。
7.UILabel上下居中
圖中使用的是一個(gè)Label蛙紫,為什么會(huì)出現(xiàn)圖中這樣的問題拍屑,出現(xiàn)頂部的大片空白是因?yàn)檫@個(gè)Label的高度太高,而內(nèi)容卻相對較少坑傅,把Label的高度設(shè)置短點(diǎn)即可僵驰。
8.UIImageView的幾種圖片填充方式
typedef enum {
UIViewContentModeScaleToFill,
UIViewContentModeScaleAspectFit, // contents scaled to fit with fixed aspect. remainder is transparent
UIViewContentModeScaleAspectFill, // contents scaled to fill with fixed aspect. some portion of content may be clipped.
UIViewContentModeRedraw, // redraw on bounds change (calls -setNeedsDisplay)
UIViewContentModeCenter, // contents remain same size. positioned adjusted.
UIViewContentModeTop,
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,
} UIViewContentMode;
UIViewContentMode 是UIView的屬性,默認(rèn)是第一種 UIViewContentModeScaleToFill唁毒,UIImageView下即圖片適應(yīng)UIImageView尺寸鋪滿 UIImageView矢渊。
其他模式的效果如下:
默認(rèn)是這樣的
折中方法:
[self.headImage setContentMode:UIViewContentModeScaleAspectFill];
self.headImage.clipsToBounds = YES;
后是這樣的
9.swf是什么文件
swf是flash動(dòng)畫文件,不少朋友經(jīng)常玩的網(wǎng)頁游戲以及網(wǎng)頁視頻電影其實(shí)都是swf文件,swf文件在網(wǎng)絡(luò)中非常常見,比如:優(yōu)酷或土豆視頻播放的都是swf文件
大家只要簡單的理解為swf文件是動(dòng)畫文件即可,swf(shock wave flash)是Macromedia(現(xiàn)已被ADOBE公司收購)公司的動(dòng)畫設(shè)計(jì)軟件Flash的專用格式,是一種支持矢量和點(diǎn)陣圖形的動(dòng)畫文件格式枉证,被廣泛應(yīng)用于網(wǎng)頁設(shè)計(jì)矮男,動(dòng)畫制作等領(lǐng)域。
不過對于一個(gè)鏈接為 http:XXXXXXXXXXXX.swf 的視頻鏈接室谚,使用原聲的視頻播放器是無法播放的毡鉴,而且使用 UIWebVIew加載也是無法顯示的,可以這樣理解秒赤,蘋果封殺了 Flash文件(swf格式)猪瞬,不支持Flash的播放,這跟喬布斯討厭Flash有關(guān)入篮,目前為止陈瘦,除了格式轉(zhuǎn)化為 HTML文件播放,原聲iOS環(huán)境是不支持swf文件的播放潮售。