Navigation Controller和 Table View

Slides:



Advertisements
Similar presentations
高一七班 研究性学习小组 当我们正为寻找什么课 题而烦恼时,忽见一 精光从我面前闪过。 艾玛,原来是我同桌 眼镜反射,自此 “ 眼镜 ” 这课题被我付诸行动。 我们为此进行了研究 讨论学习 下图为组员在查阅资料.
Advertisements

2 想买 iphone 但手头很紧怎么办? 每次充饭卡怎么都排队啊? 我想去银行实习! 如何才能省钱? ! 每月转生活费可以不出手续 费么? 打电话给朋友可以不花钱么? 不能办信用卡,可以直接贷款买东西? 让我的钱变多一些的办法? 什么叫理财? 好玩吗? 潮?
環境游離輻射 ( 六 ) 輻射與核能發電. 媽!這是我上班的 地方-核電廠。 地方好寬闊喔! 聽說日本原子彈爆炸死好幾 萬人,阿榮啊!你在這裡上 班,安全嗎?
《小狗包弟 》之 从阅读到写作 学校:和风中学 年级:高一 参赛者:彭龙英. 预习检测一 思考:同学们读完作者与包弟 的故事后,说一说作者所表达的情 感是什么?
手动换页 域外风情系列 儿子去美国留学,毕业后定居美国。还给我找了 个洋媳妇苏珊。如今,小孙子托比已经 3 岁了。 今年夏天,儿子为我申请了探亲签证。在美国待 了三个月,洋媳妇苏珊教育孩子的方法,令我这 个中国婆婆大开眼界。
99學年度第1學期導師輔導工作座談會 全校性共同必修服務學習課程 報告單位:學務處領導知能與服務學習中心.
虹膜识别健康养老服务智能系统项目.
生涯不卡關 ~生涯卡之簡介與實務應用 吳慧美.
探究活动课:互联网+历史素材阅读与研讨 古代中国的选官制度 黄天庆  探究活动课:互联网+历史素材阅读与研讨 古代中国的选官制度 黄天庆 
職校、五專群科簡介.
职业教育.课程改革.项目课程 江苏省太仓中等专业学校校长 江苏省职业教育教学改革创新指导委员会委员 江苏省职业教育课程开发研究中心组组长
学生教育办介绍 2015年9月.
江苏省工程造价管理协会 工作报告 2015年4月21日 扬州.
我在哈佛、麥肯錫 學到的一流工作術 富坂美織◎著.
Your logo 聊聊互联网保险——以平安为例 by覃丽
101年8月份 嘉義市道路交通安全聯席會報 酒駕行為與肇事現況分析 主講人:內政部警政署交通組科長張夢麟 1.
高校邦在线学习平台 学生学习手册 北京高校邦科技有限公司.
朝陽國小學校課程發表簡報 活力四年級 導師:蔡于晨.
Lua+wax在ios上的应用 白 衣.
系統分析與設計 系級:資管三B 姓名:朱秋儒 學號:
第一节 舞蹈的概念 第二节 舞蹈基本知识 第三节 舞蹈动作成套欣赏 第四节 舞蹈的编排 学习思考题 推荐书目及网站
一言之辩强于九鼎之宝 三寸之舌胜于百万雄师
投手丘上的勇者 王建民 導讀者:黃柏涵.
第一部 认识篇 知己知彼 百战不殆.
Flipster App 使用教学 适用 iPad 和 iPhone
Objective C介紹與MVC.
誰的電話永遠沒人接 您播(凌波)的 電話號碼是空號.
让微笑伴您一生.
103學年度第1階段 志願選填試探後輔導作為 成效檢討與精進建議
活动主题:佛山智造 中国骄傲 随着互联网、云计算、大数据以及移动互联网的快速发展,技术不仅仅是一种工具,正加速重构着品牌的新格局。
資料儲存.
四川省卫生监督移动 执法终端介绍 发言人:陈成身 四川省卫生执法监督总队.
獎補助經預計支用報告 105年.
《IOS应用开发教程》 QQ学习群:
《IOS应用开发教程》 QQ学习群:
基础综合 C++ Builder 显示与输入接口
Chapter 14 iPhone 平台簡介.
SUIImageView ZOOM 白仕云、iOS高级开发工程师 博客地址
(Gale Resource Centers)
Segue.
IPHONE应用开发 资源管理项目组 2018年12月24日.
第6章 控制器 所谓控制器就是能够管理和控制各种操作的设备。在iPhone开发中有八种控制器分别为:View Controller、Object、Table View Controller、Tab Bar Controller、Page View Controller、External Object、Navigation.
华东理工大学 关于新校园卡功能启用的相关说明 2018年09月07日.
感測器.
蓝色图示 — 无动画版.
《IOS应用开发基础教程》 QQ学习群:
《IOS应用开发教程》 QQ学习群:
選擇勞退新制,終身免煩惱 勞工退休金新制 說明會.
水足跡調查報告發表 環境品質文教基金會 董事長 謝英士
《IOS应用开发教程》 QQ学习群:
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
Objective C練習.
南宁翰林华府 ——地中海风格与现代住宅的融合.
中国农业科学院博士后学术论坛 博士后基金申请的经验及体会 中国农业科学院生物技术研究所 秦 华 博士
102學年度下學期 班親會 五年仁班 楊曉逸老師.
設計者:台中市重慶國小 張祐榕.楊晟汶.張儷齡
第二階段「校園徒步區建置」 執行成果報告.
僅首頁出現本title即可 責任的故事(二年級) 生命最美麗動人的本能 簡報製作:瑞柑國民小學 鄭雙慧 文/ 何秀芳.
蓝色PPT图示 1 2.
A Simple iOS Application
IOS界面制作一二事 一个IOS初学者的心得分享 蒋瞿风.
為民服務白皮書 台灣電力公司彰化區營業處  彰化區營業處 為民服務白皮書 誠信 關懷 服務 成長 1.
Section 2-2: 4 (6), 7, 12 (14), 13, 18 (16), 21, 25, 28, 30, 36, 46, 48, 50, 54a Section 3-1: 4 (2), 5, 10, 15, 20, 29, 32 Section 4-1: 3, 7, 8,
績優教師分享 美容保健科 林品瑄 教師.
多點觸控與手勢.
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
实验课程学习手册.
云控APP说明书 适用于云控平台配置.
云控APP说明书 适用于云控平台配置.
Presentation transcript:

Navigation Controller和 Table View

UITableView Section 0 Row 0 Row 1 Row 2 Row 0 Row 1 . Section 1 接著這個範例就是IPhone常見的表格,可以設定表格的圖案、文字、Label、Cell、Section等屬性。 Cell就是此表格的一格欄位,Section 就是多個欄位所組成的群組。 Row 0 Row 1 . Section 1

Row 0 Row 1 Row 2 Table View表格本身有包含Header View及Footer View欄位可以添加,每個Section本身也有Section Header View及Section Footer View欄位可以添加。 Row 0 Row 1 .

空白專案建立Single View App 建立空白專案 首先創建一個SingleView專案

Table View Controller 將圖片拉入專案中 先將藥用的圖片直接拖拉入專案中

Table View Controller 刪除SingleView,換成TableView 將原本的SingleView Controller選取並刪掉,右下方選取Table View Controller並拖拉進畫面中。

增加一個Cocoa類別檔案 Class  TableViewController Subclass UITableViewController 為了控制這個Table View Controller,新建一個Cocoa Class,名稱為TableViewController,類別為UITableViewController。

設定頁面對應的Class Property 然後記得設定此Table View Controller頁面所相關連到的Table View Controller。

設定Cell對應的Identifier 接著為了針對表格內的欄位做操作,點選一格欄位並設定identifier屬性為 My_Cell_ID。

TableViewController.m @implementation TableViewController { NSMutableArray *data; } 在TableViewController.m檔案中的implementation 範圍內加入一個區域陣列變數,NSMutableArray *data; 並在初始化函式中將此陣列變數初始化,data = [[NSMutableArray alloc] init]。 -(void)ViewDidLoad { [super viewDidLoad]; data = [[NSMutableArray alloc] init]; }

Section、Header、footer UITableViewDataSource (NSInteger)numberOfSectionsInTableView:(UITableView *) tableView 回傳此表格有幾個section (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 回傳此section有幾格 (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 回傳此section的表頭字串 - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section 回傳此section的表尾字串 為了設定表格的顯示結果,我們一定要實作這兩個函式,numberOfSectionsInTableView、numberOfRowsInSection,而另外兩個函式titleForHeaderInSection及titleForFooterInSection則非必要,若不想顯示Header及Footer則可以不用寫。

TableViewController.m - (NSInteger)numberOfSectionsInTableView:(UITableView *) tableView { return 2; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(section == 0){ return 3; } else{ return 5; 例如我們這個範例想要顯示兩個Section,於是在numberOfSectionsInTableView函式中,回傳2。 接著在numberOfRowsInSection函式中,設定第一個Section群組中擁有三個欄位,第二個Section群組中則有五個欄位。

TableViewController.m -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ if(section == 0) return @"Section 1 Header"; else return @"Section 2 Header"; } - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section{ return @"Section 1 Footer"; return @"Section 2 Footer"; 接著設定Section的Header及Footer要顯示的文字

建立表格 - (UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath 表格每一行稱為一個cell,iPhone表格設計上,一次 只配置看得到的cell,若一次只能顯示10筆,會呼叫 tableView: cellForRowAtIndexPath:10次 UITableViewCell:定義cell上顯示的內容 Property UILabel *textLabel :可指定表格上顯示UILabel UILabel *detailTextLabel:可指定表格上顯示的詳細的UILabel UIImageView *imageView :可指定表格上顯示的UIImageView 顯示表格欄位的方式預設有很多種,只要通過UITableViewCell設定參數即可改變要顯示的內容。

UITableViewCellStyle Property UITableViewCellStyleDefault UITableViewCellStyleValue1 UITableViewCellStyleValue2 UITableViewCellStyleSubtitle 這邊有四種預設的欄位可以選擇,預設為第一種,有圖片及Title。 15

建立表格內容 [data removeAllObjects]; -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if([indexPath row]==0) [data removeAllObjects]; NSString *log = [NSString stringWithFormat:@"Section %ld-%ld",[indexPath section]+1,[indexPath row]+1]; [data addObject:log]; UITableViewCell *cell=cell=[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier:@"My_CELL_ID"]; [cell.imageView setImage:[UIImage imageNamed:@"apple-icon"]]; cell.textLabel.text = [data objectAtIndex:[indexPath row]]; return cell; } 在cellForRowAtIndexPath函式中,撰寫程式來決定如何顯示我們的欄位,此程式碼將指定欄位的文字顯示為” Section X-X”,代表第幾個Section群組及row欄位,接著指定欄位的顯示種類為” UITableViewCellStyleDefault”預設值,並設定此Cell欄位圖片及文字。

選擇表格某一行事件 實作UITableViewDelegate 參數indexPath的cell被選取 (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath 參數indexPath的cell被選取 要是想要在選擇Cell欄位時產生事件,可以呼叫didSelectRowAtIndexPath。

didSelectRowAtIndexPath - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath { NSString *log = [NSString stringWithFormat:@"Section %ld-%ld",[indexPath section]+1,[indexPath row]+1]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Cell" message:log delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } 像是這樣,在點擊一格Cell欄位時,會產生一個提示視窗,告訴使用者被點擊的Cell欄位的section及row。

Cell didSelectRowAtIndexPath 用alertView顯示被選取 到的section和row 當點擊第一個Cell欄位時,顯示此第一個Cell欄位屬於Section 1及第一個row。

Cell.accessoryType UITableViewCellAccessoryNone, Property UITableViewCellAccessoryNone, UITableViewCellAccessoryDisclosureIndicator, UITableViewCellAccessoryDetailDisclosureButton, UITableViewCellAccessoryCheckmark, UITableViewCellAccessoryDetailButton Cell欄位也可以設定右邊可以點擊的圖案按鈕效果,像是右邊有提示、打勾、Detail等等。 ihsuan.peng@gmail.com

UITableViewCellAccessoryType Property UITableViewCellAccessoryNone 附加cell的類型,預設沒有 若透過accessoryView 屬性設定自定的view,此屬性會被忽 略 UITableViewCellAccessoryDetailDisclosureButton and UITableViewCellAccessoryDetailButton類型時,按鈕被按下 會會觸發 tableView:accessoryButtonTappedForRowWithIndexPath:事件 若是有設定Cell.accessoryType,則按下Cell欄位的右邊圖案時,就會觸發accessoryButtonTappedForRowWithIndexPath函式。

accessoryButtonTappedForRowWithIndexPath - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { NSString *log = [NSString stringWithFormat:@"Section %ld-%ld",[indexPath section]+1,[indexPath row]+1]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Detail" message:log delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } 這裡跟做法跟didSelectRowAtIndexPath一樣,點擊以後告訴使用者被點擊的Cell欄位的section及row。

accessoryButtonTappedForRowWithIndexPath 用alertView顯示被選取 到的section和row 像這樣,在點擊右邊的提示訊息時,就會呼叫accessoryButtonTappedForRowWithIndexPath,出現提示視窗。

TextView TextView範例 範例檔案: TextView

Storyboard--Navigation Controller ihsuan.peng@gmail.com

空白專案建立Single View App 建立空白專案 接下來要做的是有關Navigation的範例,一樣我們產生新的SingleView專案

Table View Controller 刪除SingleView,換成TableView 一樣刪掉SingleView Controller頁面,改成Table View Controller 頁面

增加一個Cocoa類別檔案 Class  TableViewController Subclass UITableViewController 產生相對應的UITableViewController Class

設定頁面對應的Class Property 記得讓頁面與UITableViewController相對應。

嵌入Navigation Controller

UINavigationItem Property NSString *title UIView *titleView 設定標題字串,放在 navigation bar的中間 UIView *titleView 設定自定的標題View,若有設定此屬性,會取代 title屬性 若leftBarButtonItem 不是nil,此屬性會被忽略 UIBarButtonItem *leftBarButtonItem 設定navigation bar左邊的元件 UIBarButtonItem *rightBarButtonItem 設定navigation bar右邊的元件 Navigation Controller有四個屬性,標題文字、標題圖案、左邊按紐、右邊按紐

修改頁面標題 設定Navigation Controller的文字標題為 Page 1

加入導覽按鈕 這邊可以直接拖拉Bar Button Item來添加按紐

self.navigationItem.leftBarButtonItem 左上方按鈕 self.editButtonItem; 這裡我們拖拉一個左上方按紐,Edit

TableViewController.m @implementation TableViewController { NSMutableArray *dataArray; } -(void)ViewDidLoad { [super viewDidLoad]; dataArray = [[NSMutableArray alloc] init]; [dataArray addObject:@"Red"]; [dataArray addObject:@"Green"]; … self.navigationItem.leftBarButtonItem = self.editButtonItem; } 這裡我們採用固定資料,將一個各種顏色的文字陣列顯示在TableView中,並設定此navigation的左邊按紐為Edit按鈕。

navigation bar的兩種編輯模式 有新增和刪除,預設為刪除 由UITableViewDelegation中tableView: editingStyleForRowAtIndexPath:的回傳值決定 (UITableViewCellEditingStyle)tableView:(UITableView *) tableView editingStyleForRowAtIndexPath: (NSIndexPath *) indexPath 接著我們可以讓此Edit按鈕觸發editingStyleForRowAtIndexPath函式,可以選擇兩種編輯模式,新增或是刪除。

新增刪除模式設定 typedef enum { UITableViewCellEditingStyleNone, UITableViewCellEditingStyleDelete, UITableViewCellEditingStyleInsert } UITableViewCellEditingStyle; 在此函式若是回傳UITableViewCellEditingStyleDelete,則是刪除一格欄位,若是UITableViewCellEditingStyleInsert,則會新增一格欄位。 -(UITableViewCellEditingStyle) tableView:(UITableView *) tableView editingStyleForRowAtIndexPath: (NSIndexPath *) indexPath{ return UITableViewCellEditingStyleInsert; return UITableViewCellEditingStyleDelete; }

self.navigationItem.leftBarButtonItem 當點選Edit按鈕時,左邊就會新增圖示並在點擊Cell欄位時分別作相對應的動作,新增或是刪除

UITableViewDataSource 新增/刪除表格 (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle) editingStyle forRowAtIndexPath: (NSIndexPath *) indexPath 當做新增或刪除cell時會執行此方法,在此方法中需實作資 料的新增和刪除 (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 回傳是否可以編輯此indexPath的cell 當選擇新增或是刪除時,就會先判斷是否可以編輯此Cell欄位,呼叫canEditRowAtIndexPath,若此函式回傳為true,則會觸發函式commitEditingStyle,在此函式實作資料的新增及刪除。

editingStyle forRowAtIndexPath (void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle) editingStyle forRowAtIndexPath:(NSIndexPath *) indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [dataArray removeObjectAtIndex:[indexPath row]]; [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; } else if (editingStyle == UITableViewCellEditingStyleInsert) { [dataArrayinsertObject:@"add Data" atIndex:[indexPath row]]; [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 這裡示範新增及刪除,首先判斷當前是新增還是刪除的動作。若是刪除,則在我們固定的字串陣列中刪除我們點選的那格Cell欄位的相對應字串物件,接著呼叫[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 來產生刪除的動畫。 若是新增,則在我們固定的字串陣列中新增一個文字陣列,在我們點選的那格Cell欄位的位置,接著呼叫[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];來產生新增的動畫。

editingStyle forRowAtIndexPath 刪除的動畫就如這樣,當點擊Blue欄位時,整個欄位會滑向左邊,並在右邊增加一個按鈕,讓使用者點擊,確認要刪除,一刪除則Blue欄位會消失,下方的欄位會擠上來。

editingStyle forRowAtIndexPath 新增的動畫就如圖所示,按下Red欄位時,會在此位置新增一格add Data欄位,並將原本的Red擠到下方。

UITableViewDataSource 移動表格順序 Reordering Table Rows (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *) indexPath 回傳是否可以移動此indexPath的cell (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *) fromIndexPath toIndexPath:(NSIndexPath *) toIndexPath 設定可移動後當移動cell時會執行此方法 也可以設定每一格欄位是否可以移動,先在canMoveRowAtIndexPath函式中判斷是否可以移動,若回傳為Yes時,就會呼叫moveRowAtIndexPath來實作移動的方法。

(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } (void)tableView:(UITableView *)tableView moveRowAtIndexPath: (NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *) toIndexPath NSUInteger fromRow = [fromIndexPath row]; NSUInteger toRow = [toIndexPath row]; id object = [dataArray objectAtIndex:fromRow]; [dataArray removeObjectAtIndex:fromRow]; [dataArray insertObject:object atIndex:toRow]; 例如這樣子寫,在canMoveRowAtIndexPath回傳Yes,並在moveRowAtIndexPath設定要移動的欄位以及要移動到哪一格欄位,相當於先刪除要移動的欄位,接著在要移動到的地方新增一格欄位

canMoveRowAtIndexPath 這就是移動的動畫效果,按住Cell欄位並移動時,就可以移動欄位。

Edit TextView 範例檔案: Edit TextView