iOS_UI_12_UITableViewCell的自定義

第十二章 UITableViewCell的自定義

一、自定義Cell
自定義cell的步驟:
    1.創建一個類繼承于UITableViewCell
    2.實現UITableViewCell的初始化方法:
        - (instancetype)initWithStyle:(UITableViewCellStyle*)style reuseIdentifier:(NSString*)reuseIdentifier;
    3.確保所有的你想添加的子視圖都在自定義cell的初始化方法中創建,由于UITableView的重用機制,一個cell在第一次創建成功并用于下一次顯示的時候,不會再走初始化方法,這樣可以避免子視圖的重復創建
    4.在cell的子視圖創建成功后,將子視圖設置為屬性,類似于UITableViewCell所自帶的textLabel和detailLabel屬性。便于在UITableView的協議中給定義視圖賦值
二、Model類型對象的使用
Model類:主要是為了給我們提供數據,簡單而言即自定義類且繼承于NSObject的稱之為Model。而繼承于UIView的稱之為View類。OC中的KVC就是幫助我們將字典轉換為Model類而存在的
1.設置cell被選中時的樣式:
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
                          UITableViewCellSelectionStyleBlue
                          UITableViewCellSelectionStyleGray
                          UITableViewCellSelectionStyleDefault
2.設置文本內容的折行顯示
    第一步:獲取要計算高度的內容
           NSString* str = self.dataArray[indexPath.row / 2];
    第二步:計算文字的高度,計算出來文字的矩形范圍
           CGRect rect = [str boundingRectWithSize:(CGSizeMake(CGRectGetWidth([UIScreen mainScreen].bounds) - 30, MAXFLOAT)) options:(NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin ) attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17.0]} context:nil];
           參數解釋:
                Size:為文字給定一個最大范圍
                options:設置計算內容大小的方式
                LineFragmentOrigin:將每一行文字都按照矩形來計算,用來計算印刷體文字的大小
                FontLeading:計算一行文字大小的時候要將行間距計算在內
                attributes:文字的屬性,例如文字的字體、或者是文字的大小
    第三步:返回內容的高度:內容的高度 + 上留白 + 下留白。當我們的文字中如果有emoji表情時,列如??,他會比平常文字稍微高一點點,我們為了更精確,多加個2;
           return rect.size.height + 10 + 10 + 2;
3.如果當前視圖控制器的父類是tableView,那么self.view  == self.tableView,注冊----self.view 和self.tableView 在類中是指的同一個東西,只是返回值類型不同,沒有層級關系
4.cell的自適應高度的步驟 
    1.在tableView返回行高的代理方法中得到需要計算高度的內容,通過字符串對象的bounding。。。。。計算出來內容的矩形大小,通過矩形大小得到高度。內容的高度+不變的高度。這就是cell的行高
    2.在自定義cell的label的懶加載中,根據cell的行高重新計算label的高度(cell的高度-除去該label以外的高度)
    注意:如果要自適應高度,一定記得要將行數設置為0;_contentLabel.numberOfLines = 0;
    自適應高度,本質上就是根據內容的高度修改cell的高度
    例:
        //懶加載
          - (UILabel*)contentLabel{
               if (!_contentLabel) {
                  _contentLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, CGRectGetWidth([UIScreen mainScreen].bounds) - 30, 30)];
                  //如果要自適應高度,一定記得要將行數設置為0;
                  _contentLabel.numberOfLines = 0;
                  _contentLabel.backgroundColor = [UIColor greenColor];
                  [self addSubview:_contentLabel];
                }
                //當我們將cell加入到重用池中的時候,系統不會幫我們進行任何操作,會將cell原樣放入重用池
                //cell在復用的時候,不會改任何東西,只是重新賦值
                //當我們每次執行該方法的時候,說明我們為label的text賦值了。說明我們正在使用Label,有可能有新的內容進來,需要重新計算label的高度
                //點的語言體系不一樣,不能連用
                CGRect rect = _contentLabel.frame;
                if ((self.frame.size.height - 20) != rect.size.height) {
                     rect.size.height = self.frame.size.height - 20;
                     _contentLabel.frame = rect;
                 }
                   return _contentLabel;
           }
5.宏定義:實質上就是整體替換,記得加括號
    1.名稱必須全部大寫  如果想要正常命名 kImage_?Width
    2.舉例:
        1.#define IMAGE_WIDTH ((CGRectGetWidth([UIScreen mainScreen].bounds) - 80 )/3)
        2.#define kImage_Width ((CGRectGetWidth([UIScreen mainScreen].bounds) - 80 )/3)
6.一般將cell中的控件通過懶加載進行控件的初始化
    好處:
        1.將初始化方法中大部分代碼拆分開了。便于我們后期維護
        2.當我們需要用到那個控件的時候,我們調用該控件的懶加載方法,這個時候才會進行初始化;用不到就不用調用,就不會初始化,節省了內存空間
        3.cell一共有三部分組成:左側的ImageVeiw 中間的contentView 右側的輔助視圖accessoryView    這三者都是通過懶加載進行初始化操作,所以我們不調用getter方法,對應的控件就不會初始化,就不會顯示
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 代碼創建UIWindow對象 Xcode7之后使用代碼創建UIWindow對象: //創建UIWindow對象 s...
    云之君兮鵬閱讀 1,370評論 0 2
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,217評論 30 472
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,255評論 4 61
  • 剛開始做微商代理的小伙伴們都是抱著不同的目標來的,有的是想賺快錢,有的想把它當成一份事業來做,有的是想做兼職,有的...
    踏天路人閱讀 383評論 0 0
  • 在漫長的地鐵時光里,我除了觀察,就是閱讀了。最近看了高志宏和徐智明合寫的《育兒基本:找到好方法,輕松做爸媽》,高和...
    十塊錢好奇大王閱讀 209評論 0 1