對於乙個當轉行幹ios的我來說,通過一段時間的使用,確實感覺到了自定義cell的強,那麼我就來說說我個人對於自定義的愚見。
一、用xib來建立乙個cell
在日常開發中,往往有一些整體樣式呈現某種統一的,布局風格一樣的cell展示時,我們首選就是用xib來定義我們的cell,從而某種程度上也減少了不必要的開發成本。
1、我們可以先新建建立乙個empty的檔案用來定義xib的布局
2、設計好了xib,來到自定義cell類中來獲取xib的布局(這裡我採用的mvc思想,cell為view層)
一般來說,我們會提供乙個類方法快速建立乙個cell,裡面處於效能考慮給cell乙個標識,然後迴圈引用來建立cell,這樣乙個我們需要的基於xib的自定義cell就建立出來了
二、用**來建立乙個cell
當然,在開發過程中,往往很多cell都是不規則的布局,那麼這時候就需要通過**計算控制項距離來定義cell了
1、還是建立乙個自定義cell的類,然後在.h檔案中給乙個快速建立cell的類方法
#import @class qcmessageframe;
@inte***ce qcmessagecelltableviewcell : uitableviewcell
/** 初始化cell
*/+(instancetype) cellwithtableview:(uitableview *)tableview;
@end
2、來到.m中來實現方法
+(instancetype) cellwithtableview:(uitableview *)tableview
return cell;
}
3、由於我們需要自定義cell的樣式,我們選擇重寫initwithstyle:reuseidentifier:
//子控制項初始化,以簡單qq聊天布局舉例
-(instancetype)initwithstyle:(uitableviewcellstyle)style reuseidentifier:(nsstring *)reuseidentifier
return self;
}
通過如此的幾個步奏,我們用**所建立cell就完成了,當然有人可能疑問為什麼沒有設定位置的**,這是因為,qq聊天是動態的位置,init中是無法確定位置,這樣,我們就要使用乙個自己設計frame模型來計算布局我們的資料模型的位置
@implementation qcmessageframe
-(void)setmessage:(qcmessage *)message
//2.頭像
cgfloat iconw = 40;
cgfloat iconh = 40;
cgfloat icony = cgrectgetmaxy(_timeframe) + padding;
cgfloat iconx;
if (message.type == qcmessagetypeother) else
_iconframe = cgrectmake(iconx, icony, iconw, iconh);
//3.正文
cgfloat texty = icony;
cgfloat textx;
cgsize textmaxsize = cgsizemake(150, maxfloat);
//這裡的sizewithfont方法是自己封裝在nsstring裡面的乙個category,用來專門處理文字所佔的尺寸大小
cgsize textrealsize = [message.text sizewithfont:qctextfont maxsize:textmaxsize];
cgsize textrealbutton = cgsizemake(textrealsize.width+qctextpadding *2, textrealsize.height+qctextpadding *2);
if (message.type == qcmessagetypeother) else
_textframe = (cgrect),textrealbutton};
高度cgfloat textmaxy = cgrectgetmaxy(_textframe);
cgfloat iconmaxy = cgrectgetmaxy(_iconframe);
_celltall = max(textmaxy, iconmaxy) + padding;
}@end
至此,乙個通過**自定義的cell並且設定位置就完成了。 自定義cell的高度
自定義cell的高度 1.把模型資料再次改寫成 乙個擁有frame和模型資料的模型類 2.在設定資料的frame類中把 擁有模型資料和frame的模型類 賦值 3.在 方法中heightforrow中只要拿到擁有frame和資料模型的模型類就可以 算出高度了 1.新建乙個繼承自uitableview...
自定義cell的流程
自定義cell的流程 通過 自定義cell的流程 1 新建乙個繼承自uitableviewcell的類 2 重寫initwithstyle reuseidentifier方法 新增所需顯示的子控制項 不需要設定子控制項的資料和frame 進行子控制項一次性的屬性設定 有些屬性只需設定一次,比如字型 ...
自定義cell的高度
步驟 1.建立乙個繼承自uitableviewcell的類。2.將cell中要用到的檢視都宣告成屬性 3.將這些檢視都新增到cell的contentview上 4.將資料物件也宣告成屬性,並重寫資料物件的setter方法,將該資料模型的屬性賦值給cell中的檢視上。5.根據文字內容自定義cell的高...