这个程序的主要界面就是一个TabBarController。总共三个标签,第一个是所有的可点的菜,第二个是已点的菜,第三个是可以留言或者查看所有留言。

下面是第一个页面:

右上角的i按钮是添加新菜,每个cell中的order就是点餐咯,可以重复按多次。

首先说下这个列表的数据是存放在coredata中的,这个项目的coredata有两个实体,一个是dishes保存每一道菜的名字,id,价格,描述,菜系等。还有一个实体是type保存菜系。

这个项目用coredata的方式,正好是我想学的。

就是在新建项目的时候勾选use coredata,那么在appdelegate中就会出现与coredata响应的代码了,只需要根据自己的需要稍微修改即可。或者是自己在已有的项目中添加一个coredata文件,然后将一个已经勾选了use coredata的项目中的appdelagate中的一些代码复制过来即可。

那么在各个文件中我需要用到coredata的时候 要怎么操作呢?看下面的代码:

  1. HotelAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
  2. //connection
  3. NSManagedObjectContext *context = [appDelegate managedObjectContext];
  4. //table
  5. NSEntityDescription *entityDescr =[NSEntityDescription entityForName:@"Dishes" inManagedObjectContext:context];
  6. //query
  7. NSFetchRequest *request = [[NSFetchRequest alloc] init];
  8. [request setEntity:entityDescr];
  9. //pred
  10. //NSPredicate *pred = [NSPredicate predicateWithString:@"id=1"];
  11. NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"typeid" ascending:YES];
  12. NSArray *arraySortDescriptor = [[NSArray alloc] initWithObjects:nameDescriptor, nil];
  13. [request setSortDescriptors:arraySortDescriptor];
  14. [arraySortDescriptor release];
  15. NSError *error;
  16. //  NSManagedObject *aDish = nil;
  17. //  NSNumber *id = [NSNumber numberWithInt:1];
  18. NSArray *objects = [context executeFetchRequest:request error:&error];
  19. if(objects != nil){
  20. self.list = objects;
  21. }
	HotelAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
//connection
NSManagedObjectContext *context = [appDelegate managedObjectContext];
//table
NSEntityDescription *entityDescr =[NSEntityDescription entityForName:@"Dishes" inManagedObjectContext:context];
//query
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescr];
//pred
//NSPredicate *pred = [NSPredicate predicateWithString:@"id=1"]; NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"typeid" ascending:YES];
NSArray *arraySortDescriptor = [[NSArray alloc] initWithObjects:nameDescriptor, nil];
[request setSortDescriptors:arraySortDescriptor];
[arraySortDescriptor release]; NSError *error;
// NSManagedObject *aDish = nil;
// NSNumber *id = [NSNumber numberWithInt:1];
NSArray *objects = [context executeFetchRequest:request error:&error]; if(objects != nil){
self.list = objects;
}

需要拿已存在于coredata中的文件的时候,就用上面的步骤就可以咯 拿到的数据就在最后的self.list中了

可以看到上面的tableView是自己绘制的,先看下面代码:

  1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  2. NSUInteger row = [indexPath row];
  3. NSManagedObject *theObj = [self.list objectAtIndex:row];
  4. NSNumber *id = [theObj valueForKey:@"id"];
  5. NSInteger typeid = [[theObj valueForKey:@"typeid"] intValue];
  6. NSLog(@"tpyeid:%d",typeid);
  7. static NSString *CellIdentifier = @"Cell";
  8. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  9. if (cell == nil) {
  10. cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
  11. UIColor *elemBgColor = [UIColor clearColor];
  12. UIImageView *img = [[UIImageView alloc] init];
  13. img.frame = CGRectMake(kX, kY, kRowHeight -10, kRowHeight -10);
  14. img.tag = kImage;
  15. [cell.contentView addSubview:img];
  16. [img release];
  17. UILabel *nameLbl = [[UILabel alloc] initWithFrame:CGRectMake(65, 0, 100, 25)];
  18. nameLbl.font = [UIFont systemFontOfSize:14];
  19. nameLbl.tag = kName;
  20. nameLbl.backgroundColor = elemBgColor;
  21. [cell.contentView addSubview:nameLbl];
  22. [nameLbl release];
  23. UILabel *typeLbl = [[UILabel alloc] initWithFrame:CGRectMake(160, 0, 70, 25)];
  24. typeLbl.font = [UIFont systemFontOfSize:14];
  25. typeLbl.tag = kType;
  26. typeLbl.backgroundColor = elemBgColor;
  27. [cell.contentView addSubview:typeLbl];
  28. [typeLbl release];
  29. UILabel *priceLbl = [[UILabel alloc] initWithFrame:CGRectMake(240, 0, 50, 25)];
  30. priceLbl.font =[UIFont systemFontOfSize:14];
  31. priceLbl.tag = kPrice;
  32. priceLbl.backgroundColor = elemBgColor;
  33. [cell.contentView addSubview:priceLbl];
  34. [priceLbl release];
  35. UILabel *introLbl = [[UILabel alloc] initWithFrame:CGRectMake(60, 25, 160, 30)];
  36. introLbl.tag = kIntro;
  37. introLbl.backgroundColor = elemBgColor;
  38. introLbl.numberOfLines = 2;
  39. introLbl.textColor = [UIColor grayColor];
  40. introLbl.font = [UIFont systemFontOfSize:12];
  41. [cell.contentView addSubview:introLbl];
  42. [introLbl release];
  43. UILabel *btnBgLbl = [[UILabel alloc] initWithFrame:CGRectMake(230, 25, 60, 30)];
  44. btnBgLbl.backgroundColor = elemBgColor;
  45. [cell.contentView addSubview:btnBgLbl];
  46. [btnBgLbl release];
  47. UIButton *orderBtn = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
  48. orderBtn.frame = CGRectMake(230, 32, 60, 20);
  49. [orderBtn setTitle:@"order" forState:UIControlStateNormal];
  50. [orderBtn addTarget:self action:@selector(order:) forControlEvents:UIControlEventTouchUpInside];
  51. [cell.contentView addSubview:orderBtn];
  52. }
  53. cell.tag = 1 + [indexPath row];
  54. TableCellView *cellView = [[TableCellView alloc] init];
  55. cellView._count = [self.list count];
  56. cellView._index = [indexPath row];
  57. cell.backgroundView = cellView;
  58. [cellView release];
  59. NSString *imageName = [NSString stringWithFormat:@"%d.jpg",[id intValue]];
  60. UIImageView *img = (UIImageView *)[cell.contentView viewWithTag:kImage];
  61. img.image = [UIImage imageNamed:imageName];
  62. UILabel *nameLbl = (UILabel *)[cell.contentView viewWithTag:kName];
  63. nameLbl.text =  [theObj valueForKey:@"name"];//[list objectAtIndex:[indexPath row]];
  64. UILabel *typeLbl = (UILabel *)[cell.contentView viewWithTag:kType];
  65. typeLbl.text = [theObj valueForKey:@"type"];
  66. UILabel *priceLbl = (UILabel *)[cell.contentView viewWithTag:kPrice];
  67. NSNumber *nPrice = [theObj valueForKey:@"price"];
  68. priceLbl.text = [NSString stringWithFormat:@"¥%d",[nPrice intValue]];
  69. UILabel *introLbl = (UILabel *)[cell.contentView viewWithTag:kIntro];
  70. NSString *introText = [theObj valueForKey:@"intro"];
  71. if([introText length] > 70){
  72. introText = [introText substringToIndex:70];
  73. introText = [introText stringByAppendingString:@"..."];
  74. }
  75. introLbl.text = introText;
  76. return cell;
  77. }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

	NSUInteger row = [indexPath row];
NSManagedObject *theObj = [self.list objectAtIndex:row]; NSNumber *id = [theObj valueForKey:@"id"];
NSInteger typeid = [[theObj valueForKey:@"typeid"] intValue];
NSLog(@"tpyeid:%d",typeid); static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; UIColor *elemBgColor = [UIColor clearColor]; UIImageView *img = [[UIImageView alloc] init];
img.frame = CGRectMake(kX, kY, kRowHeight -10, kRowHeight -10);
img.tag = kImage;
[cell.contentView addSubview:img];
[img release]; UILabel *nameLbl = [[UILabel alloc] initWithFrame:CGRectMake(65, 0, 100, 25)];
nameLbl.font = [UIFont systemFontOfSize:14];
nameLbl.tag = kName;
nameLbl.backgroundColor = elemBgColor;
[cell.contentView addSubview:nameLbl];
[nameLbl release]; UILabel *typeLbl = [[UILabel alloc] initWithFrame:CGRectMake(160, 0, 70, 25)];
typeLbl.font = [UIFont systemFontOfSize:14];
typeLbl.tag = kType;
typeLbl.backgroundColor = elemBgColor;
[cell.contentView addSubview:typeLbl];
[typeLbl release]; UILabel *priceLbl = [[UILabel alloc] initWithFrame:CGRectMake(240, 0, 50, 25)];
priceLbl.font =[UIFont systemFontOfSize:14];
priceLbl.tag = kPrice;
priceLbl.backgroundColor = elemBgColor;
[cell.contentView addSubview:priceLbl];
[priceLbl release]; UILabel *introLbl = [[UILabel alloc] initWithFrame:CGRectMake(60, 25, 160, 30)];
introLbl.tag = kIntro;
introLbl.backgroundColor = elemBgColor;
introLbl.numberOfLines = 2;
introLbl.textColor = [UIColor grayColor];
introLbl.font = [UIFont systemFontOfSize:12];
[cell.contentView addSubview:introLbl];
[introLbl release]; UILabel *btnBgLbl = [[UILabel alloc] initWithFrame:CGRectMake(230, 25, 60, 30)];
btnBgLbl.backgroundColor = elemBgColor;
[cell.contentView addSubview:btnBgLbl];
[btnBgLbl release]; UIButton *orderBtn = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
orderBtn.frame = CGRectMake(230, 32, 60, 20);
[orderBtn setTitle:@"order" forState:UIControlStateNormal];
[orderBtn addTarget:self action:@selector(order:) forControlEvents:UIControlEventTouchUpInside]; [cell.contentView addSubview:orderBtn]; }
cell.tag = 1 + [indexPath row]; TableCellView *cellView = [[TableCellView alloc] init];
cellView._count = [self.list count];
cellView._index = [indexPath row];
cell.backgroundView = cellView;
[cellView release]; NSString *imageName = [NSString stringWithFormat:@"%d.jpg",[id intValue]];
UIImageView *img = (UIImageView *)[cell.contentView viewWithTag:kImage];
img.image = [UIImage imageNamed:imageName]; UILabel *nameLbl = (UILabel *)[cell.contentView viewWithTag:kName];
nameLbl.text = [theObj valueForKey:@"name"];//[list objectAtIndex:[indexPath row]]; UILabel *typeLbl = (UILabel *)[cell.contentView viewWithTag:kType];
typeLbl.text = [theObj valueForKey:@"type"]; UILabel *priceLbl = (UILabel *)[cell.contentView viewWithTag:kPrice];
NSNumber *nPrice = [theObj valueForKey:@"price"];
priceLbl.text = [NSString stringWithFormat:@"¥%d",[nPrice intValue]]; UILabel *introLbl = (UILabel *)[cell.contentView viewWithTag:kIntro];
NSString *introText = [theObj valueForKey:@"intro"];
if([introText length] > 70){
introText = [introText substringToIndex:70];
introText = [introText stringByAppendingString:@"..."];
}
introLbl.text = introText;
return cell;
}

上面的代码中,由于坐着并没有为它的tableViewCell加一个id,所以当第一次创建cell的时候,是空的,需要自己定制,定制的过程就是把各个控件位置要放好,这个我没试过,所以对上面的坐标没什么感觉,这个需要多多尝试才知道。

这里要说的有几个点:(1)、tableViewCell有一个属性是contentView是用来容纳所有在他上面出现的控件的,自己绘制cell的时候,一定要把控件加上这个view上面,然后还有一个backgroundView是所有子view的最后面那个,在contentView上面。

(2)、本例中,cell的背景是自绘的,我不会,所以TableCellView类的代码看不太懂,有兴趣的朋友自己去研究下。

(3)、UIView有个属性tag,还有一个方法是viewWithTag.

tag是一个自己定义的常数,用来标记一个对象。viewWithTag方法呢,就是返回匹配给定的tag的view。

  1. -(IBAction) add:(id)sender {
  2. AddController *addC = [[AddController alloc] initWithNibName:@"AddController" bundle:nil];
  3. [self.navigationController pushViewController:addC animated:YES];
  4. //self.navigationController.navigationBarHidden = NO;
  5. [addC release];
  6. }
-(IBAction) add:(id)sender {
AddController *addC = [[AddController alloc] initWithNibName:@"AddController" bundle:nil];
[self.navigationController pushViewController:addC animated:YES];
//self.navigationController.navigationBarHidden = NO;
[addC release];
}

上面的代码是界面中右上角i按钮的响应方法,可以看到上面这种实现navigation跳转的方法是用push 对应的在返回的时候就用pop。这是在segue出现前的一个实现跳转的方法,现在的话 有了segue,就不用这样做咯。

这个就是按完i按钮后来到的添加新菜系的界面xib文件。

由于我主要是讲我的收获,所以在这个界面我只想讲怎么往coredata中添加新元组咯

  1. -(IBAction) add:(id)sender {
  2. if([name.text length]*[price.text length]*[type.text length]*[image.text length]*[intro.text length] == 0){
  3. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Attention" message:@"All fields needed!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
  4. [alert show];
  5. [alert release];
  6. }else{
  7. HotelAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
  8. //connection
  9. NSManagedObjectContext *context = [appDelegate managedObjectContext];
  10. //table
  11. NSEntityDescription *entityDescr =[NSEntityDescription entityForName:@"Dishes" inManagedObjectContext:context];
  12. //query
  13. NSFetchRequest *request = [[NSFetchRequest alloc] init];
  14. [request setEntity:entityDescr];
  15. //pred
  16. //NSPredicate *pred = [NSPredicate predicateWithString:@"id=1"];
  17. NSError *error;
  18. NSManagedObject *aDish = nil;
  19. NSNumber *id = [NSNumber numberWithInt:1];
  20. NSArray *objects = [context executeFetchRequest:request error:&error];
  21. if(objects != nil){
  22. aDish = [objects lastObject];
  23. id = [aDish valueForKey:@"id"];
  24. id = [NSNumber numberWithInt:[id intValue]+1];
  25. }
  26. aDish = [NSEntityDescription insertNewObjectForEntityForName:@"Dishes" inManagedObjectContext:context];
  27. [aDish setValue:id forKey:@"id"];
  28. [aDish setValue:name.text forKey:@"name"];
  29. [aDish setValue:[NSNumber numberWithInt:[price.text intValue]] forKey:@"price"];
  30. [aDish setValue:type.text forKey:@"type"];
  31. [aDish setValue:image.text forKey:@"image"];
  32. [aDish setValue:intro.text forKey:@"intro"];
  33. [request release];
  34. [context save:&error];
  35. [self clearFields];
  36. }
  37. }
-(IBAction) add:(id)sender {
if([name.text length]*[price.text length]*[type.text length]*[image.text length]*[intro.text length] == 0){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Attention" message:@"All fields needed!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}else{ HotelAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
//connection
NSManagedObjectContext *context = [appDelegate managedObjectContext];
//table
NSEntityDescription *entityDescr =[NSEntityDescription entityForName:@"Dishes" inManagedObjectContext:context];
//query
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescr];
//pred
//NSPredicate *pred = [NSPredicate predicateWithString:@"id=1"]; NSError *error;
NSManagedObject *aDish = nil;
NSNumber *id = [NSNumber numberWithInt:1];
NSArray *objects = [context executeFetchRequest:request error:&error];
if(objects != nil){
aDish = [objects lastObject];
id = [aDish valueForKey:@"id"];
id = [NSNumber numberWithInt:[id intValue]+1]; } aDish = [NSEntityDescription insertNewObjectForEntityForName:@"Dishes" inManagedObjectContext:context];
[aDish setValue:id forKey:@"id"];
[aDish setValue:name.text forKey:@"name"];
[aDish setValue:[NSNumber numberWithInt:[price.text intValue]] forKey:@"price"];
[aDish setValue:type.text forKey:@"type"];
[aDish setValue:image.text forKey:@"image"];
[aDish setValue:intro.text forKey:@"intro"];
[request release];
[context save:&error];
[self clearFields];
}
}

上面的代码是add按钮的响应方法,看完就知道了咯。

这个界面要讲的就是view的动画。这个程序中,左右滑动,可以实现翻页,看上一道菜或下一道菜,这个对我来说很有用。

  1. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  2. //int count = [touches count];
  3. //NSLog(@"count=%d",count);
  4. UITouch *touch = [touches anyObject];
  5. CGPoint location = [touch locationInView:self.view];
  6. self.lastLoction = location;
  7. moveChanged = NO;
  8. }
  9. - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
  10. }
  11. - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  12. CGPoint location = [[touches anyObject] locationInView:self.view];
  13. lastLoction = location;
  14. }
  15. - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
  16. UITouch *touch = [touches anyObject];
  17. CGPoint location = [touch locationInView:self.view];
  18. if(!moveChanged && fabs(location.x - lastLoction.x) > 60 && fabs(location.y - lastLoction.y) < 25){
  19. moveChanged = YES;
  20. [UIView beginAnimations:nil context:imageView];
  21. [UIView setAnimationDuration:1.0];
  22. [UIView setAnimationTransition:( location.x - lastLoction.x > 0? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown) forView:self.view cache:YES];
  23. [UIView setAnimationDelegate:self];
  24. [UIView setAnimationDidStopSelector:@selector(onAnimationStop:finished:context:)];
  25. [UIView commitAnimations];
  26. NSUInteger count = [self.managedObjects count];
  27. if(location.x - lastLoction.x >0){//right
  28. if(currentRowIndex < count-1){
  29. currentRowIndex = currentRowIndex +1;
  30. }
  31. }else{//left
  32. if(currentRowIndex > 0){
  33. currentRowIndex = currentRowIndex -1;
  34. }
  35. }
  36. self.theObj = [self.managedObjects objectAtIndex:currentRowIndex];
  37. NSNumber *id = [self.theObj valueForKey:@"id"];
  38. NSLog(@"%d",[id intValue]);
  39. NSLog(@"distance:%f",location.x - lastLoction.x);
  40. self.imageView.image =  [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",[id intValue]]];
  41. NSMutableString *title = [[NSMutableString alloc] init];
  42. [title appendString: [theObj valueForKey:@"name"]];
  43. [title appendString:@"  "];
  44. [title appendString:[theObj valueForKey:@"type"]];
  45. NSNumber *price = [theObj valueForKey:@"price"];
  46. [title appendString:[NSString stringWithFormat:@"¥%d",[price intValue]]];
  47. self.nameLbl.text = title;
  48. self.introText.text = [theObj valueForKey:@"intro"];
  49. [title release];
  50. NSDictionary *theRow = [FileController readRow:currentRowIndex];
  51. NSUInteger orderCount = 0;
  52. if(theRow != nil){
  53. orderCount = [[theRow valueForKey:@"count"] intValue];
  54. }
  55. self.countLbl.text = [NSString stringWithFormat:@"%d",orderCount];
  56. lastLoction = location;
  57. }
  58. }
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//int count = [touches count];
//NSLog(@"count=%d",count);
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self.view];
self.lastLoction = location;
moveChanged = NO;
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ }
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint location = [[touches anyObject] locationInView:self.view];
lastLoction = location;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self.view];
if(!moveChanged && fabs(location.x - lastLoction.x) > 60 && fabs(location.y - lastLoction.y) < 25){
moveChanged = YES;
[UIView beginAnimations:nil context:imageView];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:( location.x - lastLoction.x > 0? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown) forView:self.view cache:YES];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(onAnimationStop:finished:context:)];
[UIView commitAnimations]; NSUInteger count = [self.managedObjects count]; if(location.x - lastLoction.x >0){//right
if(currentRowIndex < count-1){
currentRowIndex = currentRowIndex +1;
}
}else{//left
if(currentRowIndex > 0){
currentRowIndex = currentRowIndex -1;
}
} self.theObj = [self.managedObjects objectAtIndex:currentRowIndex];
NSNumber *id = [self.theObj valueForKey:@"id"];
NSLog(@"%d",[id intValue]);
NSLog(@"distance:%f",location.x - lastLoction.x); self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",[id intValue]]]; NSMutableString *title = [[NSMutableString alloc] init];
[title appendString: [theObj valueForKey:@"name"]];
[title appendString:@" "];
[title appendString:[theObj valueForKey:@"type"]];
NSNumber *price = [theObj valueForKey:@"price"];
[title appendString:[NSString stringWithFormat:@"¥%d",[price intValue]]];
self.nameLbl.text = title;
self.introText.text = [theObj valueForKey:@"intro"];
[title release]; NSDictionary *theRow = [FileController readRow:currentRowIndex];
NSUInteger orderCount = 0;
if(theRow != nil){
orderCount = [[theRow valueForKey:@"count"] intValue];
} self.countLbl.text = [NSString stringWithFormat:@"%d",orderCount]; lastLoction = location;
} }
  1. [UIView beginAnimations:nil context:imageView];
  2. [UIView setAnimationDuration:1.0];
  3. [UIView setAnimationTransition:( location.x - lastLoction.x > 0? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown) forView:self.view cache:YES];
  4. [UIView setAnimationDelegate:self];
  5. [UIView setAnimationDidStopSelector:@selector(onAnimationStop:finished:context:)];
  6. [UIView commitAnimations];
		[UIView beginAnimations:nil context:imageView];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:( location.x - lastLoction.x > 0? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown) forView:self.view cache:YES];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(onAnimationStop:finished:context:)];
[UIView commitAnimations];

截取的这几句代码就是一个动画的过程.

第二个标签是读取已经下单的菜,这个没什么好说的 和第一个标签的第一个页面很相似。

第三个界面是一个可以发表建议的界面,用到了segment controller来分两个界面,一个是写的 一个是看全部的历史建议的。

切换segmentController上面的标签时,会响应valueChange方法,可以在里面判断是要显示哪个界面。

POST请求的发送也可以再复习一下:

  1. NSString *postMsg =[NSString stringWithFormat:@"user=%@&content=%@",self.name.text,self.textView.text];
  2. NSData *postData = [postMsg dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
  3. NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
  4. NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://bula.kilu.net/post.php"]];
  5. [request setHTTPMethod:@"POST"];
  6. [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
  7. [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
  8. [request setHTTPBody:postData];
  9. [NSURLConnection connectionWithRequest:request delegate:self];
	NSString *postMsg =[NSString stringWithFormat:@"user=%@&content=%@",self.name.text,self.textView.text];
NSData *postData = [postMsg dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://bula.kilu.net/post.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData]; [NSURLConnection connectionWithRequest:request delegate:self];

好了 我学到的东西是这些,还有一些是我看不懂的 对于自己绘制一些view的方法我还是不会,需要补补。

源码我待会会上传,有兴趣的朋友下载去研究下咯 不错的学习资料。,如果运行的时候说差哪一张图片的什么 就随便放张进去文件夹里面然后按它说的给个名字就行了,不影响代码研究。

上传好了 源码地址:ios点餐系统

ios 点餐系统的更多相关文章

  1. 非常不错的点餐系统应用ios源码完整版

    该源码是一款非常不错的点餐系统应用,应用源码齐全,运行起来非常不错,基本实现了点餐的一些常用的功能,而且界面设计地也很不错,是一个不错的ios应用学习的例子,喜欢的朋友可以下载学习看看,更多ios源码 ...

  2. 很不错的点餐系统应用ios源代码完整版

    该源代码是一款很不错的点餐系统应用,应用源代码齐全,执行起来很不错,基本实现了点餐的一些经常使用的功能,并且界面设计地也很不错,是一个不错的ios应用学习的样例,喜欢的朋友能够下载学习看看,很多其它i ...

  3. 点餐系统web版功能需求

                餐厅到店点餐系统需求分析 (版本v1.0.0)               成文信息 主题词: 需求分析 作  者: 14商软ETC 文档类别: 审  核: 批  准: 文档性 ...

  4. [课程设计]Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计)

    Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统 ...

  5. [课程设计]Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案)

    Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统W ...

  6. [课程设计]Scrum 3.6 多鱼点餐系统开发进度(用户测试反馈页面构思&留言板设计)

    Scrum 3.6 多鱼点餐系统开发进度(用户测试反馈页面构思&留言板设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团 ...

  7. [课程设计]Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面)

    Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅 ...

  8. [课程设计]Scrum 3.4 多鱼点餐系统开发进度(下单详细信息页面&会员信息页面)

    Scrum 3.4 多鱼点餐系统开发进度(下单详细信息页面&会员信息页面) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队 ...

  9. [课程设计]Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计)

    Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计)  1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点 ...

随机推荐

  1. 3d工具收集

    Poser 是Metacreations公司推出的一款三维动物.人体造型和三维人体动画制作的极品软件.用过Poser 2与Poser 3的朋友一定能感受到Poser的人体设计和动画制作是那么的轻松自如 ...

  2. 搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构

    1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...

  3. c3p0连接池的简单使用和测试1

  4. UVA10129:Play on Words(欧拉回路)

    Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to s ...

  5. python_17(sql)

    第1章 MySQL安装 1.1 windows版下载地址 1.2 添加环境变量 1.3 初始化 1.4 启动mysql服务 1.5 链接mysql 1.6 制作mysql的windows服务 1.7 ...

  6. H5存储

    1.localstorage ① 500万字符限制② 一般存储ajax请求返回数据,并且需要设置过期时间③ 具有清理机制,将过期数据清理④ 不存储敏感信息⑤ 不存储SEO依赖数据,至少不能严重依赖⑥ ...

  7. FXP登录Linux报错

    1.用FXP登录Linux报错: [info] subsystem request for sftp failed, subsystem not found.[右] [execute] /usr/li ...

  8. Vuex.js状态管理共享数据 - day8

    VScode文件目录: amount.vue代码如下: <template> <div> <!-- <h3>{{ $store.state.count }}& ...

  9. 跨平台C++开源代码的两种常用编译方式

    作者:朱金灿 来源:http://blog.csdn.net/clever101 跨平台C++开源代码为适应各种编译器的编译,采用了两种方式方面来适配.一种是makefile方式.以著名的空间数据格式 ...

  10. CString的GetBuffer和ReleaseBuffer

    GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定,使得CString对象在以后的代码中继续可以实现长度自适应增长的功能. CString ::GetBu ...