PresidentDetailController.m
上传用户:jjjjag8
上传日期:2017-04-17
资源大小:1443k
文件大小:7k
源码类别:

iPhone

开发平台:

MultiPlatform

  1. //
  2. //  PresidentDetailController.m
  3. //  Nav
  4. //
  5. //  Created by Jeff LaMarche on 7/22/08.
  6. //  Copyright 2008 __MyCompanyName__. All rights reserved.
  7. //
  8. #import "PresidentDetailController.h"
  9. #import "President.h"
  10. #import "NavAppDelegate.h"
  11. @implementation PresidentDetailController
  12. @synthesize president;
  13. @synthesize fieldLabels;
  14. @synthesize tempValues;
  15. @synthesize textFieldBeingEdited;
  16. #pragma mark -
  17. -(IBAction)cancel:(id)sender{
  18. NavAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
  19. [delegate.navController popViewControllerAnimated:YES];
  20. }
  21. - (IBAction)save:(id)sender
  22. {
  23. if (textFieldBeingEdited != nil)
  24. {
  25. NSNumber *tfKey= [[NSNumber alloc] initWithInt:textFieldBeingEdited.tag];
  26. [tempValues setObject:textFieldBeingEdited.text forKey:tfKey];
  27. [tfKey release];
  28. }
  29. for (NSNumber *key in [tempValues allKeys])
  30. {
  31. switch ([key intValue]) {
  32. case kNameRowIndex:
  33. president.name = [tempValues objectForKey:key];
  34. break;
  35. case kFromYearRowIndex:
  36. president.fromYear = [tempValues objectForKey:key];
  37. break;
  38. case kToYearRowIndex:
  39. president.toYear = [tempValues objectForKey:key];
  40. break;
  41. case kPartyIndex:
  42. president.party = [tempValues objectForKey:key];
  43. default:
  44. break;
  45. }
  46. }
  47. // Have parent view reload its data
  48. NavAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
  49. UINavigationController *navController = [delegate navController];
  50. [navController popViewControllerAnimated:YES];
  51. NSArray *allControllers = navController.viewControllers;
  52. UITableViewController *parent = [allControllers lastObject];
  53. [parent.tableView reloadData];
  54. }
  55. -(IBAction)textFieldDone:(id)sender
  56. {
  57. UITableViewCell *cell = (UITableViewCell *)[[(UIView *)sender superview] superview];
  58. UITableView *table = (UITableView *)[cell superview];
  59. NSIndexPath *textFieldIndexPath = [table indexPathForCell:cell];
  60. NSUInteger row = [textFieldIndexPath row];
  61. row++;
  62. if (row >= kNumberOfEditableRows)
  63. row = 0;
  64. NSUInteger newIndex[] = {0, row};
  65. NSIndexPath *newPath = [[NSIndexPath alloc] initWithIndexes:newIndex length:2];
  66. UITableViewCell *nextCell = [self.tableView cellForRowAtIndexPath:newPath];
  67. UITextField *nextField = nil;
  68. for (UIView *oneView in nextCell.contentView.subviews)
  69. {
  70. if ([oneView isMemberOfClass:[UITextField class]])
  71. nextField = (UITextField *)oneView;
  72. }
  73. [nextField becomeFirstResponder];
  74. }
  75. #pragma mark -
  76. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
  77. if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
  78. // Initialization code
  79. }
  80. return self;
  81. }
  82. - (void)viewDidLoad {
  83. NSArray *array = [[NSArray alloc] initWithObjects:@"Name:", @"From:", @"To:", @"Party:", nil];
  84. self.fieldLabels = array;
  85. [array release];
  86. UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]
  87.  initWithTitle:@"Cancel"
  88.  style:UIBarButtonItemStylePlain
  89.  target:self
  90.  action:@selector(cancel:)];
  91. self.navigationItem.leftBarButtonItem = cancelButton;
  92. [cancelButton release];
  93. UIBarButtonItem *saveButton = [[UIBarButtonItem alloc]
  94.    initWithTitle:@"Save" 
  95.    style:UIBarButtonItemStyleDone
  96.    target:self
  97.    action:@selector(save:)];
  98. self.navigationItem.rightBarButtonItem = saveButton;
  99. [saveButton release];
  100. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  101. self.tempValues = dict;
  102. [dict release];
  103. [super viewDidLoad];
  104. }
  105. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  106. // Return YES for supported orientations
  107. return (interfaceOrientation == UIInterfaceOrientationPortrait);
  108. }
  109. - (void)didReceiveMemoryWarning {
  110. [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
  111. // Release anything that's not essential, such as cached data
  112. }
  113. - (void)dealloc {
  114. [textFieldBeingEdited release];
  115. [tempValues release];
  116. [president release];
  117. [fieldLabels release];
  118. [super dealloc];
  119. }
  120. #pragma mark -
  121. #pragma mark Table Data Source Methods
  122. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  123. return kNumberOfEditableRows;
  124. }
  125. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  126. {
  127. static NSString *PresidentCellIdentifier = @"PresidentCellIdentifier";
  128. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:PresidentCellIdentifier];
  129. if (cell == nil) {
  130. cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero 
  131.    reuseIdentifier:PresidentCellIdentifier] autorelease];
  132. UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 75, 25)];
  133. label.textAlignment = UITextAlignmentRight;
  134. label.tag = kLabelTag;
  135. label.font = [UIFont boldSystemFontOfSize:14];
  136. [cell.contentView addSubview:label];
  137. [label release];
  138. UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(90, 12, 200, 25)];
  139. textField.clearsOnBeginEditing = NO;
  140. [textField setDelegate:self];
  141. //textField.returnKeyType = UIReturnKeyDone;
  142. [textField addTarget:self 
  143.   action:@selector(textFieldDone:) 
  144. forControlEvents:UIControlEventEditingDidEndOnExit];
  145. [cell.contentView addSubview:textField];
  146. }
  147. NSUInteger row = [indexPath row];
  148. UILabel *label = (UILabel *)[cell viewWithTag:kLabelTag];
  149. UITextField *textField = nil;
  150. for (UIView *oneView in cell.contentView.subviews)
  151. {
  152. if ([oneView isMemberOfClass:[UITextField class]])
  153. textField = (UITextField *)oneView;
  154. }
  155. label.text = [fieldLabels objectAtIndex:row];
  156. NSNumber *rowAsNum = [[NSNumber alloc] initWithInt:row];
  157. switch (row) {
  158. case kNameRowIndex:
  159. if ([[tempValues allKeys] containsObject:rowAsNum])
  160. textField.text = [tempValues objectForKey:rowAsNum];
  161. else
  162. textField.text = president.name;
  163. break;
  164. case kFromYearRowIndex:
  165. if ([[tempValues allKeys] containsObject:rowAsNum])
  166. textField.text = [tempValues objectForKey:rowAsNum];
  167. else
  168. textField.text = president.fromYear;
  169. break;
  170. case kToYearRowIndex:
  171. if ([[tempValues allKeys] containsObject:rowAsNum])
  172. textField.text = [tempValues objectForKey:rowAsNum];
  173. else
  174. textField.text = president.toYear;
  175. break;
  176. case kPartyIndex:
  177. if ([[tempValues allKeys] containsObject:rowAsNum])
  178. textField.text = [tempValues objectForKey:rowAsNum];
  179. else
  180. textField.text = president.party;
  181. default:
  182. break;
  183. }
  184. if (textFieldBeingEdited == textField)
  185. textFieldBeingEdited = nil;
  186. textField.tag = row;
  187. [rowAsNum release];
  188. return cell;
  189. }
  190. #pragma mark -
  191. #pragma mark Table Delegate Methods
  192. - (NSIndexPath *)tableView:(UITableView *)tableView 
  193.   willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  194. return nil;
  195. }
  196. #pragma mark Text Field Delegate Methods
  197. - (void)textFieldDidBeginEditing:(UITextField *)textField
  198. {
  199. self.textFieldBeingEdited = textField;
  200. }
  201. - (void)textFieldDidEndEditing:(UITextField *)textField
  202. {
  203. NSNumber *tagAsNum = [[NSNumber alloc] initWithInt:textField.tag];
  204. [tempValues setObject:textField.text forKey:tagAsNum];
  205. [tagAsNum release];
  206. }
  207. @end