UITableView與UISearchController搜索及上拉載入,下拉刷新

来源:http://www.cnblogs.com/ljcgood66/archive/2016/04/20/5411041.html
-Advertisement-
Play Games

源文件這裡有http://pan.baidu.com/s/1pLlDm6f UITableView與UISearchController搜索及上拉載入,下拉刷新 ...


  1 #import "ViewController.h"
  2 #import "TuanGouModel.h"
  3 #import "TuanGouTableViewCell.h"
  4 #define kDeviceWidth [UIScreen mainScreen].bounds.size.width
  5 #define kDeviceHeight [UIScreen mainScreen].bounds.size.height
  6 @interface ViewController ()<UITableViewDelegate,UITableViewDataSource,UISearchResultsUpdating>
  7 {
  8     UISearchController * _sscller;
  9 }
 10 @property(nonatomic,strong)NSMutableArray* secArrM;
 11 
 12 @property(nonatomic,strong) NSMutableArray* tuanGouArrM;
 13 
 14 @property(nonatomic,strong)UITableView* myTable;
 15 
 16 @end
 17 
 18 @implementation ViewController
 19 
 20 - (void)viewDidLoad {
 21     
 22     [super viewDidLoad];
 23     [self createNa];
 24     self.myTable.backgroundColor = [UIColor lightGrayColor];
 25     [self createsecB];
 26     [self setupRefresh];
 27     
 28     self.title = @"美食家";
 29 }
 30 
 31 #pragma mark - 導航
 32 -(void)createNa{
 33     
 34     UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithTitle:@"Edit" style:UIBarButtonItemStylePlain target:self action:@selector(tableEdit:)];
 35     self.navigationItem.rightBarButtonItem = rightItem;
 36     self.title = @"美食家";
 37 
 38 }
 39 
 40 // 點擊導航右側編輯按鈕時,讓表格可編輯
 41 -(void)tableEdit:(UIBarButtonItem *) btnItem{
 42     
 43 //    if (self.myTable.editing == NO ) {      // 沒有處於編輯狀態,導航按鈕文字為“Edit”
 44 //        // 點擊“編輯”文字,讓表格處於編輯狀態,並把按鈕的文字修改為“Done"
 45 //        self.myTable.editing = YES;
 46 // 
 47 //    }else{
 48 //        // 編輯狀態下,點擊”Done"按鈕,取消表格的編輯狀態,修改導航按鈕文字為"Edit"
 49 //        self.myTable.editing = NO;
 50 //        btnItem.title = @"Edit" ;
 51 //        self.navigationItem.rightBarButtonItems = @[btnItem];
 52 //    }
 53     
 54 }
 55 
 56 -(void)createsecB{
 57     _sscller = [[UISearchController alloc]initWithSearchResultsController:nil];
 58     _sscller.searchResultsUpdater = self;
 59     self.myTable.tableHeaderView = _sscller.searchBar;
 60     
 61     
 62 }
 63 -(NSMutableArray *)secArrM{
 64     
 65     
 66     if (_secArrM == nil) {
 67        return _secArrM = [NSMutableArray array];
 68         
 69     }else{
 70          return _secArrM;
 71     }
 72     
 73     
 74    
 75 }
 76 
 77 - (void)didReceiveMemoryWarning {
 78     
 79     [super didReceiveMemoryWarning];
 80     
 81 }
 82 #pragma mark - 表格懶載入
 83 -(UITableView *)myTable{
 84     if (_myTable == nil) {
 85         _myTable = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, kDeviceWidth, kDeviceHeight) style:UITableViewStylePlain];
 86         [self.view addSubview:_myTable];
 87         
 88         _myTable.delegate = self;
 89         _myTable.dataSource = self;
 90         _myTable .separatorStyle = UITableViewCellSeparatorStyleSingleLineEtched;
 91         
 92     }
 93     return _myTable;
 94 
 95 }
 96 
 97 #pragma mark - 團購數據懶載入
 98 -(NSMutableArray *)tuanGouArrM{
 99 
100     if (_tuanGouArrM == nil) {
101         _tuanGouArrM = [NSMutableArray array];
102         NSString* plistPath = [[NSBundle mainBundle]pathForResource:@"tgs.plist" ofType:nil];
103         NSArray* tuanArr = [NSArray arrayWithContentsOfFile:plistPath];
104         
105         for (NSDictionary* dict in tuanArr) {
106             TuanGouModel* model =[[TuanGouModel alloc]initWithDict:dict];
107             [_tuanGouArrM addObject:model];
108         }
109     }
110     return _tuanGouArrM;
111 }
112 
113 #pragma mark - 數據源協議
114 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
115     if ( _sscller.active ) {        //搜索結果表格
116         return  self.secArrM.count;
117     }
118     
119     else{
120         return self.tuanGouArrM.count;
121 
122    }
123 }
124 
125 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
126  
127     //註冊
128     [tableView registerClass:[TuanGouTableViewCell class] forCellReuseIdentifier:@"tuanCell"];
129     //重置
130     TuanGouTableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"tuanCell"forIndexPath:indexPath];
131     cell.backgroundColor = [UIColor yellowColor];
132     // 選中風格
133     cell.selectionStyle = UITableViewCellSelectionStyleNone;
134     if( !_sscller.active ){
135        cell.tuanGouModel = self.tuanGouArrM[indexPath.row];
136     }else{          //搜索結果
137        cell.tuanGouModel = self.secArrM[indexPath.row];
138     }
139     
140 
141     return cell;
142 }
143 #pragma mark - TableV協議
144 
145 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
146 
147     return 80;
148 }
149 
150 -(void)updateSearchResultsForSearchController:(UISearchController *)searchController{
151     
152     [self.secArrM removeAllObjects];
153         for (int j = 0; j < _tuanGouArrM.count; j++) {
154             TuanGouModel* model =[[TuanGouModel alloc]init];
155                  model = _tuanGouArrM[j];
156             if ([model.title isEqualToString: _sscller.searchBar.text]) {
157                 [self.secArrM addObject: model];
158             }
159     }
160     
161     [self.myTable reloadData];
162 }
163 
164 
165 //允許Menu菜單
166 -(BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath
167 {
168     return   YES;
169 }
170 
171 //每個cell都可以點擊出現Menu菜單
172 -(BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender
173 {
174     return   YES;
175 
176 }
177 -(void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender{
178 
179     NSLog(@"長按");
180     
181     if (action ==@selector(copy:)) {
182         
183        NSLog(@"copy");
184         
185     }
186     if (action ==@selector(cut:)) {
187         NSLog(@"cut");
188         
189     }
190     
191     if (action ==@selector(paste:)) {
192         
193        
194         NSLog(@"paste");
195     }
196 
197     if (action ==@selector(selectAll:)) {
198         
199         
200         NSLog(@"selectAll");
201     }
202 
203 
204 }
205 //上拉載入
206 -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
207     if (indexPath.row == self.tuanGouArrM.count - 1) {
208         NSLog(@"最後一行");
209         
210         TuanGouModel* model =[[TuanGouModel alloc]init];
211         model = _tuanGouArrM[arc4random()%12];
212         [_tuanGouArrM addObject:model];
213         [self.myTable reloadData];
214 
215     }
216 }
217 
218 //下拉刷新
219 -(void)setupRefresh
220 {
221     //1.添加刷新控制項
222     UIRefreshControl *control=[[UIRefreshControl alloc]init];
223     [control addTarget:self action:@selector(refreshStateChange:) forControlEvents:UIControlEventValueChanged];
224     [self.myTable addSubview:control];
225     
226     //2.馬上進入刷新狀態,並不會觸發UIControlEventValueChanged事件
227     [control beginRefreshing];
228     
229     // 3.載入數據
230     [self refreshStateChange:control];
231 }
232 
233 
234 /**
235  *  UIRefreshControl進入刷新狀態:載入最新的數據
236  */
237 -(void)refreshStateChange:(UIRefreshControl *)control
238 {
239     TuanGouModel* model =[[TuanGouModel alloc]init];
240     model = _tuanGouArrM[arc4random()%12];
241     [_tuanGouArrM insertObject:model atIndex:0];
242     [self.myTable reloadData];
243 
244      NSLog(@"第一行");
245      [control endRefreshing];
246     
247 }
248 
249 //指示是否允許高亮顯示選中的行
250 - (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath{
251     
252     return YES;
253 }
254 
255 //選中某行時執行
256 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
257     NSLog(@"selected: %ld, row:%ld", indexPath.section, indexPath.row);
258 }
259 //取消選中時執行,這個方法常在表格允許多選時調用執行
260 - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
261     NSLog(@"Deselected: %ld, row:%ld", indexPath.section, indexPath.row);
262 }

源文件這裡有http://pan.baidu.com/s/1pLlDm6f

UITableView與UISearchController搜索及上拉載入,下拉刷新


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

-Advertisement-
Play Games
更多相關文章
  • 點擊鏈接,下載報告原文:http://bbs.tingyun.com/forum.php?mod=viewthread&tid=136 2015 年,可以說是移動應用生態系統發展史上的一座里程碑。從技術上看,不斷增加的屏幕解析度,64位處理器,到支持所有平臺開發的HTML5技術逐步成熟,硬體性能的提 ...
  • 來自遠方的“僵屍之手” 最近,安天AVL移動安全和獵豹移動安全實驗室共同截獲病毒“僵屍之手“——一種偽裝成正常應用,並通過遠程指令控制中毒手機,實施惡意行為的病毒。該病毒通常偽裝成正常的工具類應用或娛樂類應用進行傳播(如下圖所示)。“僵屍之手”在用戶未察覺其為病毒的情況下安裝進入用戶手機,成功繞開部 ...
  • 1.tableView隱藏滾動條 2.關於屬性 使用assign: 對基礎數據類型 (NSInteger,CGFloat)和C數據類型(int, float, double, char, 等等) 使用copy: 對NSString 使用copy: 對NSString 使用retain(strong) ...
  • 一,效果圖。 二,代碼。 RootViewController.m ...
  • 1:iOS 使用NJKWebViewProgress做webview進度條 2:解決輸入框UITextField關於拼音或部首被當作內容響應 這裡主要使用了兩個知識: 輸入法輸入時,拼音字母或者筆畫處於選中狀態,可以使用 markedTextRange 獲取到 普通輸入,以及將輸入法的待選字填入輸入 ...
  • 先把字元串轉換成時間NSDate 然後再把時間轉換成我們需要的時間格式的字元串 其中需要註意的是 EEE 和 MMM 所代表的含義 會隨著 NSDateForMatter 的 Locale 屬性的不同 而改變 當Locale 屬性為 ...
  • 最近在使用iOS的可變數組時出現了一個錯誤,報錯信息為: reason: '-[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object' 字面的意思就是可變數組的方法發送給了一個不可變的對象。 聲明和初始 ...
  • 樣式和主題(Styles and Themes) 一個樣式(Style)是一個包含了指定樣子和格式的作用於視圖控制項(View)或者窗體(Window)屬性集合。一個style可以指定很多屬性,比如 高度,填充,字體顏色,字體尺寸,背景色等。一個Style在xml資源文件中定義,並且和在xml中指定的 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...