UITableView 基本使用方法總結

来源:https://www.cnblogs.com/jiuyi/archive/2019/01/31/10340686.html
-Advertisement-
Play Games

1.、首先,Controller需要實現兩個 delegate ,分別是 UITableViewDelegate 和 UITableViewDataSource2、然後 UITableView對象的 delegate要設置為 self。3、 然後就可以實現這些delegate的一些方法拉。 (1)- ...


1.、首先,Controller需要實現兩個  delegate ,分別是  UITableViewDelegate 和  UITableViewDataSource
2、然後 UITableView對象的 delegate要設置為 self。
3、 然後就可以實現這些delegate的一些方法拉。

(1)- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;   這個方法返回 tableview 有多少個section 

//返回有多少個Sections
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{
    return 1;
}

(2)- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section;  這個方法返回   對應的section有多少個元素,也就是多少行。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    return 10;
}

(3)- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;   這個方法返回指定的 row 的高度。

        - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;   這個方法返回指定的 section的header view 的高度。

        - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;   這個方法返回指定的 section的footer view 的高度。

(4)- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;  返回指定的row 的cell。

這個地方是比較關鍵的地方,一般在這個地方來定製各種個性化的 cell元素。這裡只是使用最簡單最基本的cell 類型。其中有一個主標題 cell.textLabel 還有一個副標題cell.detailTextLabel,  還有一個 image在最前頭 叫 cell.imageView 還可以設置右邊的圖標,通過cell.accessoryType 可以設置是飽滿的向右的藍色箭頭,還是單薄的向右箭頭,還是勾勾標記。  

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *showUserInfoCellIdentifier = @"ShowUserInfoCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:showUserInfoCellIdentifier];
    if (cell == nil)
    {
        // Create a cell to display an ingredient.
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:showUserInfoCellIdentifier] autorelease];
    }
    
    // Configure the cell.
    cell.textLabel.text=@"簽名";
    cell.detailTextLabel.text = [NSString stringWithCString:userInfo.user_signature.c_str() encoding:NSUTF8StringEncoding];
 }

 (5)- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section   返回指定的 section 的 header 的高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section ==0)
        return 80.0f;
    else
        return 30.0f;
}

(6)- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section  返回指定的section 的 header  的 title,如果這個section header  有返回view,那麼title就不起作用了。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if (tableView == tableView_)
    {
        if (section == 0) 
        {
            return @"title 1";
        } 
        else if (section == 1) 
        {
            return @"title 2";
        } 
        else 
        {
            return nil;
        }
    } 
    else 
    {
        return nil;
    }
}

(7) - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section   返回指定的 section header 的view,如果沒有,這個函數可以不返回view

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if (section == 0) 
    {
        UIView* header = [[[NSBundle mainBundle] loadNibNamed: @"SettingHeaderView" owner: self options: nil] lastObject];
    else
    {
        return nil;
    }
}

(8)  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath   當用戶選中某個行的cell的時候,回調用這個。但是首先,必須設置tableview的一個屬性為可以select 才行。

TableView.allowsSelection=YES;

如果不希望響應select,那麼就可以用下麵的代碼設置屬性:

cell.selectionStyle=UITableViewCellSelectionStyleBlue;

下麵是響應select 點擊函數,根據哪個section,哪個row 自己做出響應就好啦。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if (indexPath.section == 1) 
    {
        return;
    }
    else if(indexPath.section==0)
    {
        switch (indexPath.row) 
        {
            //聊天
            case 0:
            {
                [self  onTalkToFriendBtn];
            }
                break;
            default:
                break;
        }
    }
    else 
    {
        return ;
    }
}

如何讓cell 能夠響應 select,但是選中後的顏色又不發生改變呢,那麼就設置    cell.selectionStyle = UITableViewCellSelectionStyleNone;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //cell被選中後的顏色不變
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

(9)如何設置 tableview  每行之間的 分割線 

self.tableView.separatorStyle=UITableViewCellSeparatorStyleSingleLine;

如果不需要分割線,那麼就設置屬性為 UITableViewCellSeparatorStyleNone  即可。

(10)如何設置 tableview cell的背景顏色

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     //設置背景顏色
     cell.contentView.backgroundColor=[UIColor colorWithRed:0.957 green:0.957 blue:0.957 alpha:1];

(11) - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath   這個函數響應,用戶點擊cell 右邊的 箭頭(如果有的話)

(12)如何設置tableview 可以被編輯 首先要進入編輯模式:

[TableView setEditing:YES animated:YES];

如果要退出編輯模式,肯定就是設置為NO

 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath   返回當前cell  要執行的是哪種編輯,下麵的代碼是 返回 刪除  模式

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}

 -(void) tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle) editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath   通知告訴用戶編輯了 哪個cell,對應上面的代碼,我們在這個函數裡面執行刪除cell的操作。

-(void) tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle) editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [chatArray  removeObjectAtIndex:indexPath.row];
    [chatTableView  reloadData];
}

(13)如何獲得 某一行的CELL對象   - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 微信小程式 人臉識別登陸的實現 關鍵詞:微信小程式 人臉識別 百度雲介面 前言 這是一篇關於一個原創微信小程式開發過程的原創文章。涉及到的核心技術是微信小程式開發方法和百度雲人臉識別介面。小程式的主體是一個用於個人密碼存儲的密碼管理器,在登陸註冊階段,需要調用百度雲人臉識別介面以及百度雲線上人臉庫的 ...
  • 跨功能需求(Cross-Functional Requirements, CFR)通常被稱為非功能需求(Non-Functional Requirements, NFR), 也可以叫做系統質量屬性(System Quality Attributes/Traits), 是指那些用來評價系統運行狀態的需... ...
  • 在上一篇 學習安卓開發[4] 使用隱式Intent啟動簡訊、聯繫人、相機應用 中瞭解了在調用其它應用的功能時隱式Intent的使用,本次基於一個圖片瀏覽APP的開發,記錄使用AsyncTask在後臺執行HTTP任務以獲取圖片URL,然後使用HandlerThread動態下載和顯示圖片 HTTP 請求 ...
  • 本文以一個簡單的小例子,簡述Android開發中GridView的常見應用,僅供學習分享使用。 ...
  • 參考文章: "約束佈局ConstraintLayout看這一篇就夠了" "ConstraintLayout 屬性篇" 介紹 Android 是谷歌推出替代 的組件。 支持相對佈局、線性佈局、幀佈局,看來更像是 、 t、`RelativeLayout·三者的結合體,並且比這三者更強大的是實現了百分比布 ...
  • 一、UIScrollView是什麼? 1、UIScrollView是滾動的view,UIView本身不能滾動,子類UIScrollview拓展了滾動方面的功能。 2、UIScrollView是所有滾動視圖的基類。以後的UITableView,UITextView等視圖都是繼承於該類。 使用場景:顯示 ...
  • 最近在項目中用到了手勢操作,鍵盤迴收時還是挺常用的,現在總結下,多謝網路上大神們的分享。 先分享下我在項目中用的代碼: 將相應代碼複製到你的工程中即可使用,由於代碼中已經有詳細的解釋說明,這裡就不在重覆解釋了。 代碼中只是列舉了單指與雙指對於單擊或多擊的處理,同理多指的操作需修改numberOfTo ...
  • 一、創建過程 二、TextView點擊事件 對比Java代碼,雖然代碼相似,可以看出Kotlin簡潔: 大大減少樣板代碼的數量。 三、kotlin知識點 😀Kotlin 程式文件以 .kt 結尾,如:hello.kt 、MainActivity.kt。 😀Android Studio 從 3.0 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...