ios7資料添加2——Start Developing iOS Apps Today——從今天開始開發IOS(IOS7版

來源:互聯網
上載者:User

標記的項目為已完成待辦事項清單不是多好,如果為已完成你永遠無法標記的項目。現在,您將添加該支援。一個簡單的介面將有完成狀態切換的時候使用者點擊單元格,並帶有核取記號在他們旁邊顯示已完成的項目。幸運的是,表視圖配備了一些內建的行為,你可以充分利用來實現這個簡單的介面,具體而言,表視圖通知其委託當使用者點擊一個單元格。因此,這項任務是編寫將要攻表中的待辦事項響應使用者的代碼。Xcode中已經取得XYZToDoListViewController當您在指令碼配置它的表視圖的委託。所有您需要做的就是實現了實現代碼如下tableView:didSelectRowAtIndexPath:委託方法來響應使用者的水龍頭,並適當地更新你的待辦事項清單項目。
當一個細胞被選中,調用實現代碼如下tableView:didSelectRowAtIndexPath:委託方法,看看應該如何處理選擇。在此方法中,您將編寫代碼來更新待辦項目的完成狀態。
要為已完成或尚未完成的標誌項目
1.在項目導航器中,選擇XYZToDoListViewController.m 。
2.將下列語句添加到檔案的末尾,略高於@end行:

#pragma mark - Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ }
嘗試輸入,而不只是複製和粘貼的第二行。你會發現,程式碼完成是Xcode的偉大節省時間的功能之一。在Xcode中帶來了潛在落成的列表,在列表中滾動,直到找到你想要的,然後按斷行符號鍵。 Xcode中插入整行給你。
3.你要應對的頭部,但實際上並不那麼請選中該單元格。添加下面的代碼選擇後立即取消選擇的單元格:
[tableView deselectRowAtIndexPath:indexPath animated:NO];

4.尋找您toDoItems數組中的對應XYZToDoItem。
XYZToDoItem *tappedItem = [self.toDoItems objectAtIndex:indexPath.row];
5切換tapped項目的完成狀態。
tappedItem.completed = !tappedItem.completed;
6.告訴表視圖重新載入其資料剛剛更新的行。
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
你的tableView:didSelectRowAtIndexPath:方法應該這樣:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    [tableView deselectRowAtIndexPath:indexPath animated:NO];    XYZToDoItem *tappedItem = [self.toDoItems objectAtIndex:indexPath.row];    tappedItem.completed = !tappedItem.completed;    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];}

要點:運行您的應用程式。您在loadInitialData新增項目的清單是因為細胞在表視圖中可見。但是,當你點擊的項目,似乎什麼都沒有發生。為什麼不呢?
其原因是,你還沒有配置表視圖單元格顯示項目的完成狀態。要做到這一點,你需要回到實現代碼如下tableView:cellForRowAtIndexPath: 方法和登錄區當一個項目完成後,顯示的指標。
以表示該項目已完成的一種方法是把一個核取記號旁邊。幸運的是,表視圖單元格可以在右側的單元格的配件。預設情況下,沒有附件,但是,您可以更改單元格以顯示不同的配件,其中之一是一個核取記號。所有您需要做的是設定都是基於待辦項目的完成狀態。
要顯示一個項目的完成狀態
1.轉到tableView:cellForRowAtIndexPath:方法。
2.添加下面的代碼正下方,設定單元格的文字標籤的行:
if (toDoItem.completed) {    cell.accessoryType = UITableViewCellAccessoryCheckmark;} else {    cell.accessoryType = UITableViewCellAccessoryNone;}

tableView:cellForRowAtIndexPath: 方法現在應該是這樣的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static NSString *CellIdentifier = @"ListPrototypeCell";    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];    XYZToDoItem *toDoItem = [self.toDoItems objectAtIndex:indexPath.row];    cell.textLabel.text = toDoItem.itemName;    if (toDoItem.completed) {        cell.accessoryType = UITableViewCellAccessoryCheckmark;    } else {        cell.accessoryType = UITableViewCellAccessoryNone;    }    return cell;}

要點:運行您的應用程式。您在loadInitialData新增項目的清單是因為細胞在表視圖中可見。當您點擊一個項目,一個核取記號應該出現在它旁邊。如果你再次點擊相同的項目,核取記號消失。

添加新項目在建立待辦列表應用程式的功能的最後一步是實現以新增項目的能力。當使用者輸入在文字欄位中的項目名稱上XYZAddToDoItemViewController情境,Done按鈕,你想要的視圖控制器來建立一個新的清單項目,並通過它回到XYZToDoListViewController在待辦事項清單中顯示。
首先,你需要有一個清單項目來配置。正如表視圖,視圖控制器的介面串連到模型的合理位置。給XYZAddToDoItemViewController一個屬性來儲存新的待辦事項。

將XYZToDoItem添加到XYZAddToDoItemViewController類
1.在項目導航器中,選擇XYZToDoListViewController.h 。
因為你需要從你的表視圖控制器訪問清單項目以後,重要的是使這個公用財產。這就是為什麼你在介面檔案中, XYZAddToDoItemViewController.h在實現檔案中,XYZAddToDoItemViewController.m聲明代替它。
2.添加進口報關上面的@介面線的XYZToDoItem類。
#import "XYZToDoItem.h"
3.在介面中添加toDoItem
@interface XYZAddToDoItemViewController : UIViewController @property XYZToDoItem *toDoItem; @end

要獲得新項目的名稱,視圖控制器需要訪問使用者在其中輸入名稱的文字欄位的內容。要做到這一點,建立串連到文字欄位中的Storyboard從XYZAddToDoItemViewController類的串連。
該文字欄位串連到您的視圖控制器

1.在大綱視圖中,選擇XYZAddToDoItemViewController對象。
2.單擊該視窗中的工具列開啟助理編輯右上方的助手按鈕。
vcWxvtbQ0aHU8c7Esb7X1rbOoaMgPGJyPgo0LrC0z8JDb250cm9svPzNz9enzsSxvtfWts7W0MrkyOvE+rXEu62yvNTa09Kx37XEseC8rcb31tC1xLT6wuvP1Mq+o6zNo9a5zc+2r8LUtc3T2tTaWFlaQWRkVG9Eb0l0ZW1WaWV3Q29udHJvbGxlci5ttcRAvdO/2s/fwre1xM/fwrfJz6GjPGJyPgoKPGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20140125/2014012509102548.jpg" width="500" height="500" alt="\">
5.在出現的,對於名稱,TextField類型的對話方塊。
離開其餘的選項,因為它們。你的對話方塊應該像這樣:

6.單擊串連。
Xcode中添加必要的代碼來XYZAddToDoItemViewController.m的指標儲存到文字欄位和配置指令碼來設定該串連。

此外,你需要知道什麼時候建立的項目。您希望建立只有完成按鈕被竊聽的項目。要做到這一點,添加完成按鈕作為一個出口。

完成按鈕串連到您的視圖控制器
1.在你的指令碼,開啟助理編輯,並設定最右邊的視窗XYZAddToDoItemViewController.m。
2.在你的指令碼中選擇Done(完成)按鈕。
3.按下Control鍵拖拽完成按鈕你的畫布,在右邊的編輯器中的代碼顯示,停止拖動略低於在XYZAddToDoItemViewController.m您的TextField屬性的行上。
4.在出現的對話方塊中,名稱中鍵入doneButton。
離開其餘的選項,因為它們。你的對話方塊應該像這樣:

5.點擊串連
您現在有一個方法來識別完成按鈕。因為你要建立一個項目時被竊聽Done按鈕,你需要知道什麼時候出現這種情況。
當使用者點擊完成按鈕,它揭開序幕的展開SEGUE回待辦事項清單,這就是你的第二個教程配置的介面。一個賽格瑞執行之前,系統給出參與機會通過調用prepareForSegue準備視圖控制器。這正是在您要檢查使用者是否拍了拍Done按鈕的點,如果是這樣,建立一個新的待辦事項。您可以檢查哪些按鈕之一得到了挖掘,如果它是完成按鈕,建立該項目。

以攻Done按鈕後建立項目
1.在項目導航器中選擇XYZAddToDoItemViewController.m。
2.添加prepareForSegue:下面的@行實現方法:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{}
3.在該方法中,看到Done按鈕是否被竊聽。
而不是儲存的項目如果不是,你想而不做其他任何返回的方法。
if (sender != self.doneButton) return;

4.看是否有在文字欄位中的文本。
if (self.textField.text.length > 0) {}
5.如果有文本,建立一個新的項目,並給它在文字欄位中的文本的名稱。此外,確保完成狀態設定為NO。
self.toDoItem = [[XYZToDoItem alloc] init];self.toDoItem.itemName = self.textField.text;self.toDoItem.completed = NO;

如果沒有文字,你不希望儲存的項目,這樣你就不會做別的。
你的prepareForSegue:方法應該是這樣的:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{    if (sender != self.doneButton) return;    if (self.textField.text.length > 0) {        self.toDoItem = [[XYZToDoItem alloc] init];        self.toDoItem.itemName = self.textField.text;        self.toDoItem.completed = NO;    }}

現在,您已經建立了一個新的項目,你需要通過項目回XYZToDoListViewController ,以便它可以將項目添加到待辦事項清單。要做到這一點,你需要重新審視的unwindToList :您在第二個教程寫的方法。這種方法被稱為XYZAddToDoItemViewController現場關閉時,當使用者點擊任何取消或完成按鈕的情況。
該unwindToList :方法接受一個segue作為參數,這樣的作為目標的展開SEGUE的所有方法。該賽格瑞參數是從開卷XYZAddToDoItemViewController回XYZToDoListViewController的SEGUE 。因為segue是兩個視圖控制器之間的過渡,它知道它的原始碼視圖控制器XYZAddToDoItemViewController的。通過詢問SEGUE對象其源視圖控制器,您可以訪問儲存在unwindToList源視圖控制器的任何資料:方法。在這種情況下,您要訪問的TodoItem 。如果是nil,該項目一直沒有建立,無論是文字欄位沒有任何文字或使用者點擊取消按鈕。如果有針對的TodoItem值,則檢索該項目,把它添加到你的toDoItems陣列,並通過重新載入在表視圖中的資料在待辦事項清單中顯示它。

儲存和顯示的新項目

1.在項目導航器中,選擇XYZToDoListViewController.m 。
2.添加進口報關上面的@interface行的XYZAddToDoItemViewController類。
#import "XYZAddToDoItemViewController.h"
3.找到unwindToList:您在第二個教程中添加方法。
4.在此方法中,檢索您是從,XYZAddToDoItemViewController解除源視圖控制器的控制器。
XYZAddToDoItemViewController *source = [segue sourceViewController];

5.擷取控制器的待辦事項。
XYZToDoItem *item = source.toDoItem;
這是完成按鈕被竊聽時建立的項目。
6.看到該項目是否存在。
if (item != nil) {}

如果是nil,要麼取消按鈕關閉螢幕或文字欄位沒有文字,所以你不希望儲存的項目。
如果它確實存在,將項目添加到您的toDoItems陣列。
[self.toDoItems addObject:item];

7.重新整理在你的表中的資料。
因為表視圖不跟蹤它的資料,它的資料來源,在這種情況下的責任,你的表視圖控制器來通知表視圖時,有它來顯示新的資料。
[self.tableView reloadData];

你的unwindToList:方法應該是這樣的:
- (IBAction)unwindToList:(UIStoryboardSegue *)segue{    XYZAddToDoItemViewController *source = [segue sourceViewController];    XYZToDoItem *item = source.toDoItem;    if (item != nil) {        [self.toDoItems addObject:item];        [self.tableView reloadData];    }}

要點:運行您的應用程式。現在,當您單擊添加按鈕(+),並建立一個新的項目,你應該看到它在你的待辦事項清單。恭喜!您已經建立了一個應用程式,需要來自使用者的輸入,它儲存在一個對象,並傳遞兩個視圖控制器之間的對象。這是移動的情境之間的資料在Storyboard為基礎的應用程式的基礎。
回顧你幾乎與開發iOS應用程式的這篇介紹巡演做。最後一節為您提供了關於如何發現身邊的文檔你走的更多資訊,並提出了一些你可能需要為你將學習如何建立更進階的應用程式的下一個步驟。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.