導航控制器和表視圖密不可分,在實際的應用程式中實作導航控制器,幾乎總要實作至少一個表,因為導航控制器的強大之處在于它能夠處理複雜的分層資料,在iphone上,連續的表視圖是表示分層資料最理想的分層方式。
導航控制器使用内置動畫在視圖之間順利移動,無需編寫曆史紀錄控制,導航控制器會自動處理Back按鈕時間,讓使用者“岀棧”。
UINavigationController是建構分層應用的主要工具,與UITabBarController很類似,但是前者是以棧來實作功能,關于棧,我們并不陌生,遵守先進後出的原則,向棧中添加一個對象為入棧,從棧中删除一個對象叫出棧。
UINavigationController是建構分層應用程式的主要工具。本次的應用程式将由一個導航控制器和六個子控制器組成。
如何把表視圖中的資料寫入子表中;
.如何把表視圖中的資料寫入可以讀取甚至可以編輯詳細資料的内容視圖中;
.如何通過表清單來從多個值中進行選擇;
.如何通過編輯模式從表視圖中删除行。
下面是觸摸頂級試圖第一行Disclosure Butttons時出現的界面(第一個視圖右側的擴充圖示被稱為是擴充訓示器,用于告知使用者觸摸這一行将切換到另一個表視圖),其他幾個試圖都是如此。
在編輯過程中需注意以下幾點:
1)清單隻顯示來自數組的多個行,是以需要聲明一個數組實作表視圖時需要遵從兩個協定UITableViewDelagate和UITableViewDataSource,類需要這兩個協定來充當表視圖的委托和資料源,然後聲明一個數組用于放置将要顯示的資料。
@interface Disclosure_Buttons : UIViewController<UITableViewDelegate,UITableViewDataSource>
{
NSArray *listData;
}
2)方法傳回數組計數個數:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [listDatacount];
3) 方法擷取一個可重用單元,如果單元不存在則建立一個新的單元。然後從對應查詢的數組中擷取對象,将單元的文本設定成控制器标題并傳回單元
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
staticNSString*DisclosureCellIdentifier = @"DisclosureCellIdentifier";
UITableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:DisclosureCellIdentifier];
if (cell == nil)
{//建立一個新的單元
cell=[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:DisclosureCellIdentifier];
//對應查詢數組中擷取的對象,将單元文本設定成控制器标題并傳回單元
NSUInteger row=[indexPath row];
NSString *rowData=[listDataobjectAtIndex:row];
cell.textLabel.text=rowData;
cell.accessoryType=UITableViewCellAccessoryDetailDisclosureButton;
return cell;
4) tableView:didSelectRowAtIndexPath:方法是使用者單擊某行後調用的方法,如果在調用時需要觸發資訊展開,則調用此方法
5)tableView:editingStyleForRowAtIndexPath
方法是表視圖可以查詢指定行是否可以進行删除,是否可以将新行插入到指定位置。
通過傳回UITableViewEditingStyleNone表示不支援插入和删除行。
6)從屬性表中加載資料
-(void)viewDidLoad{
NSString *path=[[NSBundlemainBundle] pathForResoure:@"computers" ofType:@"plist"];
NSMutableArray *array=[[NSMutableArrayalloc] initWithContentsOfFile:path];
self.list=array;
[array release];
[superviewDidLoad];
7)UITableViewCellEditingStyleNone:不允許被編輯
UITableViewCellEditingStyleDelete:允許删除
UITableViewCellEditingStyleInsert:允許插入
8)encodeWithCoder:方法把對象編碼為歸檔檔案
initWithCoder:方法從歸檔檔案中建立新的對象