《iPad开发从入门到精通》——6.4节收藏历史

6.4 收藏历史
iPad开发从入门到精通
为了方便用户,特意提供了收藏历史功能,用户可以将经常用到的信息收藏起来,便于以后查询。主要包括如下3类收藏信息。
收藏线路。
收藏站点。
收藏站站。
CFavoriteView.xib的UI界面如图6-9所示,在上方显示了3个选项卡,在下方列表中显示了具体的收藏信息。

文件CFavoriteViewController.h的实现代码如下所示。

#import <UIKit/UIKit.h>
enum ESegCtrlIndex
{
  EFavorite_Line,
  EFavorite_Stat,
  EFavorite_StatToStat
}segCtrlIndex;
@interface CFavoriteViewController : UIViewController <UITableViewDelegate,UITableView DataSource>{

  UITableView      *favoriteTableView;

  UINavigationBar    *favNavigationBar;
  UISegmentedControl  *favoriteSegCtrl;

  NSInteger      ESegType;
}
@property (nonatomic, retain) IBOutlet  UITableView      *favoriteTableView;
@property (nonatomic, retain) IBOutlet   UISegmentedControl  *favoriteSegCtrl;
@property (nonatomic, retain) IBOutlet UINavigationBar    *favNavigationBar;
-(IBAction)OnSegmentIndexChanged:(id)sender;
@end
文件CFavoriteViewController.m是文件CFavoriteViewController.h的实现,分别实现了收藏线路、收藏站点和收藏站站的功能,并且还可以删除不需要的收藏信息。具体实现代码如下所示。

#import "CFavoriteViewController.h"
#import "CDataContainer.h"
#import "CBus_LineDetailViewController.h"
#import "CBus_StationDetailViewController.h"
@implementation CFavoriteViewController
@synthesize favoriteTableView,favoriteSegCtrl,favNavigationBar;
// 视图初始化
- (void)viewDidLoad {
  [super viewDidLoad];
  ESegType = EFavorite_Line;
  UIBarButtonItem *editButton = [[UIBarButtonItem alloc]
                  initWithTitle:@"Delete"
                  style:UIBarButtonItemStyleBordered
                  target:self
                  action:@selector(toggleEdit:)];
  self.navigationItem.rightBarButtonItem = editButton;
  [editButton release];  
}
-(IBAction)toggleEdit:(id)sender{
  [self.favoriteTableView setEditing:!self.favoriteTableView.editing animated:YES];

  if (self.favoriteTableView.editing){
    [self.navigationItem.rightBarButtonItem setTitle:@"Done"];
  }
  else{
    [self.navigationItem.rightBarButtonItem setTitle:@"Delete"];
  }
}
#pragma mark -
#pragma mark View lifecycle
- (void)viewWillAppear:(BOOL)animated{
  [super viewWillAppear:animated];
  [favoriteTableView reloadData];  
  NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
  NSInteger styleNum = [userDefault integerForKey:@"styleType"];
  switch (styleNum) {
    case 0:{
      [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
      self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
      self.favoriteSegCtrl.tintColor = [UIColor colorWithRed:0.48  green:0.56 blue:0.66 alpha:1.0];
      self.favNavigationBar.barStyle = UIBarStyleDefault;
      break;
    }
    case 1:{
      [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyle BlackOpaque;
      self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
      self.favoriteSegCtrl.tintColor = [UIColor darkGrayColor];
      self.favNavigationBar.barStyle = UIBarStyleBlackOpaque;
      break;
    }
  }
  [favoriteTableView reloadData];
}
#pragma mark -
#pragma mark Table view data source
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
  if (ESegType == EFavorite_Line){
    return @"收藏线路";
  }
  else if(ESegType == EFavorite_Stat){
    return @"收藏站点";
  }
  else if(ESegType == EFavorite_StatToStat){
    return @"收藏站站";
  }

  return nil;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
  return 30;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  // Return the number of sections
  return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  // Return the number of rows in the section
  if (ESegType == EFavorite_Line){
    return [[CDataContainer Instance].favoriteLineNameArray count];
  }
  else if(ESegType == EFavorite_Stat){
    return [[CDataContainer Instance].favoriteStationNameArray count];
  }
  else if(ESegType == EFavorite_StatToStat){
    return [[CDataContainer Instance].favoriteStatToStatBeginNameArray count];
  }  
  return 0;
}
// 自定义单元格的外观
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  
  if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
  }  
  cell.selectionStyle = UITableViewCellSelectionStyleGray;
  cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
  // 配置单元格
  if (ESegType == EFavorite_Line){
    [[CDataContainer Instance] GetLineStationFromTableSequence:
     [[[CDataContainer Instance].favoriteLineIndexArray objectAtIndex:indexPath.row] intValue]];
    NSString *beginStr = [[CDataContainer Instance].stationNameArray
objectAtIndex:GetBusLineSequenceByIndex:0]-1];
    NSString *endStr = [[CDataContainer Instance].stationNameArray objectAtIndex:                 [[CDataContainer Instance] GetBusLineSequenceBy Index:[[CDataContainer Instance].sequenceNumArray count]-1]-1];
    NSString *detailStr = [[NSString alloc] initWithFormat:@"%@->%@",beginStr,endStr];
    cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
    cell.detailTextLabel.text = detailStr;
    [detailStr release];    
    cell.imageView.image = [UIImage imageNamed:@"bus_table_line.png"];
    cell.textLabel.text = [[CDataContainer Instance].favoriteLineNameArray
objectAtIndex:indexPath.row];
  }
  else if(ESegType == EFavorite_Stat){
    cell.detailTextLabel.text = @"";
    cell.imageView.image = [UIImage imageNamed:@"bus_table_stat.png"];
    cell.textLabel.text = [[CDataContainer Instance].favoriteStationNameArray
objectAtIndex:indexPath.row];
  }
  else if(ESegType == EFavorite_StatToStat){
    cell.detailTextLabel.text = @"";
    cell.imageView.image = [UIImage imageNamed:@"bus_statTostat.png"];

    NSString *beginStr = [[CDataContainer Instance].favoriteStatToStatBeginName Array objectAtIndex:indexPath.row];
    NSString *endStr  = [[CDataContainer Instance].favoriteStatToStatEndName Array objectAtIndex:indexPath.row];
    NSString *detailStr= [[NSString alloc] initWithFormat:@"%@->%@",beginStr,endStr];
    cell.textLabel.text = detailStr;
    [detailStr release];
  }

  return cell;
}
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
  return YES;
}
// 优先支持编辑表视图
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditing Style)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
  if (editingStyle == UITableViewCellEditingStyleDelete)
  {
  // 从数据源中删除行

    if (ESegType == EFavorite_Line) {
      [[CDataContainer Instance] DeleteFavoriteInfoToDatabase:0
                             DeleteName:
[[CDataContainer Instance].favoriteLineNameArray objectAtIndex:indexPath.row]
                           DeteleNameEnd:nil];
      [[CDataContainer Instance].favoriteLineNameArray removeObjectAtIndex:
indexPath.row];
      [[CDataContainer Instance].favoriteLineIndexArray removeObjectAtIndex:
indexPath.row];
    }
    else if(ESegType == EFavorite_Stat){
      [[CDataContainer Instance] DeleteFavoriteInfoToDatabase:1
                             DeleteName:[[CDataContainer Instance].favoriteStationNameArray objectAtIndex:
indexPath.row]
                           DeteleNameEnd:nil];
      [[CDataContainer Instance].favoriteStationNameArray removeObject
AtIndex:indexPath.row];
      [[CDataContainer Instance].favoriteStationIndexArray removeObject
AtIndex:indexPath.row];
    }
    else if(ESegType == EFavorite_StatToStat){
      [[CDataContainer Instance] DeleteFavoriteInfoToDatabase:2
                             DeleteName:
[[CDataContainer Instance].favoriteStatToStatBeginNameArray objectAtIndex:indexPath.row]
                           DeteleNameEnd:
[[CDataContainer Instance].favoriteStatToStatEndNameArray objectAtIndex:indexPath.row]];

      [[CDataContainer Instance].favoriteStatToStatBeginNameArray remove
ObjectAtIndex:indexPath.row];
      [[CDataContainer Instance].favoriteStatToStatBeginIndexArray remove
ObjectAtIndex:indexPath.row];  
      [[CDataContainer Instance].favoriteStatToStatEndNameArray remove
ObjectAtIndex:indexPath.row];
      [[CDataContainer Instance].favoriteStatToStatEndIndexArray remove
ObjectAtIndex:indexPath.row];
    }

    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] with
RowAnimation:UITableViewRowAnimationFade];
  } 
  else if (editingStyle == UITableViewCellEditingStyleInsert) {
  // 创建一个新实例的适当的类,将它插入到数组中,并添加一个新行表观
  } 
}
#pragma mark -
#pragma mark Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  // 导航逻辑创造和推动另一个视图控制器  
  if (ESegType == EFavorite_Line){
    CBus_LineDetailViewController *detailViewController = [[CBus_LineDetailView Controller alloc] initWithNibName:@"CBus_LineDetailView" bundle:nil];

    detailViewController.currentLineIndex = [[[CDataContainer Instance].
favoriteLineIndexArray objectAtIndex:indexPath.row] intValue];
    detailViewController.currentLineName = [[CDataContainer Instance].
favoriteLineNameArray objectAtIndex:indexPath.row];

    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
  }
  else if(ESegType == EFavorite_Stat){
    CBus_StationDetailViewController *detailViewController = [[CBus_Station DetailViewController alloc] initWithNibName:@"CBus_StationDetailView" bundle:nil];

    detailViewController.currentStationIndex = [[[CDataContainer Instance].
favoriteStationIndexArray objectAtIndex:indexPath.row] intValue];
    detailViewController.currentStationName = [[CDataContainer Instance].
favoriteStationNameArray objectAtIndex:indexPath.row];

    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
  }
  else if(ESegType ==EFavorite_StatToStat){
    CBus_StationDetailViewController *detailViewController = [[CBus_Station
DetailViewController alloc] initWithNibName:@"CBus_StationDetailView" bundle:nil];
    detailViewController.beginStationName = [[CDataContainer Instance].
favoriteStatToStatBeginNameArray objectAtIndex:indexPath.row];
    detailViewController.beginStationIndex = [[[CDataContainer Instance].
favoriteStatToStatBeginIndexArray objectAtIndex:indexPath.row] intValue];
    detailViewController.endStationName = [[CDataContainer Instance].favorite
StatToStatEndNameArray objectAtIndex:indexPath.row];
    detailViewController.endStationIndex = [[[CDataContainer Instance].favorite
StatToStatEndIndexArray objectAtIndex:indexPath.row] intValue];

    detailViewController.isStatToStat = YES;

    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
  }
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)  

interfaceOrientation {
  // Return YES for supported orientations
  return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
-(IBAction)OnSegmentIndexChanged:(id)sender{
  if ([sender selectedSegmentIndex] == 0){
    ESegType = EFavorite_Line;
  }
  else if([sender selectedSegmentIndex] == 1){
    ESegType = EFavorite_Stat;
  }
  else if([sender selectedSegmentIndex] == 2){
    ESegType = EFavorite_StatToStat;
  }
  [favoriteTableView reloadData];
}
- (void)didReceiveMemoryWarning {

  [super didReceiveMemoryWarning];
}
- (void)viewDidUnload {

  [super viewDidUnload];
  // Release any retained subviews of the main view
  // e.g. self.myOutlet = nil;
  self.favoriteTableView = nil;
}
- (void)dealloc {

  [favoriteTableView release];
  [favoriteSegCtrl release];
  [favNavigationBar release];
  [super dealloc];
}
@end

执行效果如图6-10所示。

时间: 2024-09-20 01:13:29

《iPad开发从入门到精通》——6.4节收藏历史的相关文章

《iPad开发从入门到精通》——6.2节系统主界面

6.2 系统主界面 iPad开发从入门到精通 本章实例的的源码保存在":\daima\6\Bus",默认的系统主界面是线路查询视图,在线路查询视图CBus_LineView.xib顶部设置了一个查询表单,在下方列表显示系统内的公交线路.线路查询视图的UI界面如图6-1所示. 6.2.1 线路查询视图 实现文件CBus_LineViewController.h的代码如下所示. #import <UIKit/UIKit.h> @interface CBus_LineViewCo

《iPad开发从入门到精通》——6.3节站站查询

6.3 站站查询 iPad开发从入门到精通 本模块的功能是提供站站查询功能,只需输入起始站和目的站的名称,就可以快速查询到符合要求的公交线路了.在本节的内容中,将详细讲解站站查询模块的具体实现流程. 6.3.1 站站查询主视图 站站查询主视图CBus_StatToStatView.xib的UI界面如图6-6所示,在上方显示搜索表单,下方列表显示了30条线路. 实现文件CBus_StatToStatViewController.h的代码如下所示. #import <UIKit/UIKit.h>

《iPad开发从入门到精通》——6.1节系统介绍

6.1 系统介绍iPad开发从入门到精通在具体编码之前,大家需要先了解本实例项目的基本功能,了解各个模块的具体结构,为后期的编码工作打好基础.本章的音乐盒项目功能强大,具备如下所示的功能. (1)线路查询.为了方便用户迅速找到自己需要的线路,提供了线路查询功能.只需输入某路公交的线路名,就可以快速查询到这条线路. (2)站站查询.为了满足系统的完整性要求,特意提供了站站查询功能.只需输入自己的起始站和目的站的名称,就可以快速查询到符合要求的公交线路. (3)收藏历史.为了方便用户,特意提供了收藏

《iPad开发从入门到精通》——6.6节系统设置

6.6 系统设置iPad开发从入门到精通为了方便用户对本系统的管理,特意提供了本模块供用户对系统进行管理.主要包括如下所示的功能. 主题设置.当前城市.数据下载.软件信息.在本节的内容中,将详细讲解本项目系统设置模块的实现过程. 6.6.1 主视图系统设置主视图CSettingView.xib的UI界面效果如图6-15所示,分别列出了主题设置.当前城市.数据下载和软件信息共4个选项. 实现文件CSettingViewController.m的主要代码如下所示. @implementation C

《iPad开发从入门到精通》——6.5节地图信息

6.5 地图信息iPad开发从入门到精通通过此功能,可以在地图中查看某条公交线路的信息,这样更具有直观性,大大地方便了用户的浏览.本系统可以分为如下3种显示地图的样式.Standard.Statellite.Hybird.除此之外,还提供了网页地图功能. 6.5.1 地图主视图地图主视图CBus_MapView.xib的UI界面效果如图6-11所示.在上方显示3个选项卡,在下方显示了地图信息. 实现文件 CBus_MapViewController.m的主要代码如下所示. #import "CB

《iPad开发从入门到精通》——导读

目 录 第1章 iOS开发入门第2章 Objective-C语言基础第3章 开发一个浏览器程序第4章 开发一个视频播放器第5章 开发一个翻书特效系统第6章 开发一个公交路线查询系统 6.1 系统介绍 6.2 系统主界面 6.3 站站查询 6.4 收藏历史 6.5 地图信息 6.6 系统设置 第7章 开发一个记事本程序第8章 开发一个地图系统第9章 开发一个拼图游戏第10章 开发一个密码系统第11章 开发一个绘图程序

《51单片机应用开发从入门到精通》——2.4 延时时间计算实例

2.4 延时时间计算实例 51单片机应用开发从入门到精通 在单片机的实时控制系统中,常常需要用到延时操作,所以,延时子程序往往是编写单片机程序中不可缺少的一部分.延时方法有硬件延时和软件延时,硬件延时将在后面有关章节中介绍,本节将介绍软件延时方法. 所谓软件延时,就是让计算机重复执行一些无具体任务的程序,利用执行程序的时间来达到延时的目的. 2.4.1 机器周期和指令周期 单片机读.写操作都需要消耗一定的时间,机器周期是指单片机完成一个基本操作所用的时间,如读操作.写操作等.当石英晶体为12MH

《C++ 开发从入门到精通》导读

前言 C++ 开发从入门到精通 从你开始学习编程的那一刻起,就注定了以后所要走的路:从编程学习者开始,依次经历实习生.程序员.软件工程师.架构师.CTO等职位的磨砺:当你站在职位顶峰的位置蓦然回首,会发现自己的成功并不是偶然,在程序员的成长之路上会有不断修改代码.寻找并解决Bug.不停测试程序和修改项目的经历:不可否认的是,只要你在自己的开发生涯中稳扎稳打,并且善于总结和学习,最终将会得到可喜的收获. 选择一本合适的书 对于一名想从事程序开发的初学者来说,究竟如何学习才能提高自己的开发技术呢?其

《C语言开发从入门到精通》一导读

前言 C语言开发从入门到精通 从你开始学习编程的那一刻起,就注定了以后所要走的路:从编程学习者开始,依次经历实习生.程序员.软件工程师.架构师.CTO等职位的磨砺:当你站在职位顶峰的位置蓦然回首,会发现自己的成功并不是偶然,在程序员的成长之路上会有不断修改代码.寻找并解决Bug.不停测试程序和修改项目的经历:不可否认的是,只要你在自己的开发生涯中稳扎稳打,并且善于总结和学习,最终将会得到可喜的收获. 目 录 第1章 C语言之定位1.1 C语言的诞生1.2 第一印象的建立1.3 理解编译系统--学