Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 17th, 2012  |  syntax: None  |  size: 8.35 KB  |  hits: 30  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Custom UITableViewCells
  2. @interface EditableLabel : UILabel {  
  3.     UIView *inputView, *inputAccessoryView;
  4. }
  5.  
  6. @property (nonatomic, retain) UIView *inputView, *inputAccessoryView;
  7.  
  8. - (void) setInputView:(UIView *)aView andToolbar:(UIToolbar *)aToolbar;
  9.  
  10. @end
  11.        
  12. @implementation EditableLabel
  13.  
  14. @synthesize inputView, inputAccessoryView;
  15.  
  16. - (void) dealloc {
  17.     [inputView release];
  18.     [inputAccessoryView release];
  19.     [super dealloc];
  20. }
  21.  
  22. - (void) setInputView:(UIView *)aView andToolbar:(UIToolbar *)aToolbar {
  23.     self.inputAccessoryView = aToolbar;
  24.     self.inputView = aView;
  25. }
  26.  
  27. - (BOOL) canBecomeFirstResponder {
  28.     return YES;
  29. }
  30.  
  31. - (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  32.     [self becomeFirstResponder];
  33. }
  34.  
  35. @end
  36.        
  37. typedef enum {
  38.     USERNAME, PASSWORD, MOBILE, BIRTHDAY, GENDER, DESCRIPTION, CATEGORY
  39. } CellTag;
  40.  
  41. @interface EditableCell : UITableViewCell {
  42.     CellTag tag;    
  43.     UIView *editPoint;
  44.     IBOutlet UILabel *headerLabel;
  45. }
  46.  
  47. - (void) setTag:(CellTag)aTag andHeader:(NSString *)aHeader andEditPoint:(UIView *)aView;
  48.  
  49. @property (nonatomic) CellTag tag;
  50. @property (nonatomic, retain) UIView *editPoint;
  51. @property (nonatomic, retain) UILabel *headerLabel;
  52.  
  53. - (IBAction) editingDone:(id)sender;
  54.  
  55. - (void) showInputView;
  56. - (void) hideInputView;
  57.  
  58. @end
  59.        
  60. @implementation EditableCell
  61.  
  62. @synthesize tag, editPoint, headerLabel;
  63.  
  64. - (void) dealloc {
  65.     [editPoint release];
  66.     [headerLabel release];
  67.     [super dealloc];
  68. }
  69.  
  70. - (void) setTag:(CellTag)aTag andHeader:(NSString *)aHeader andEditPoint:(UIView *)aView {
  71.     self.tag = aTag;
  72.     self.headerLabel.text = aHeader;
  73.     self.editPoint = aView;
  74. }
  75.  
  76. - (IBAction) editingDone:(id)sender {
  77.     [self hideInputView];
  78. }
  79.  
  80. - (void) showInputView {  
  81.     [self.editPoint becomeFirstResponder];
  82. }
  83.  
  84. - (void) hideInputView {
  85.     [self.editPoint resignFirstResponder];    
  86. }
  87.  
  88. @end
  89.        
  90. @interface EditableLabelCell : EditableCell {
  91.     IBOutlet UILabel *placeHolderLabel;
  92.     IBOutlet EditableLabel *editableLabel;
  93. }
  94.  
  95. @property (nonatomic, retain) UILabel *placeHolderLabel;
  96. @property (nonatomic, retain) EditableLabel *editableLabel;
  97.  
  98. - (void) setTag:(CellTag)aTag
  99.       andHeader:(NSString *)aHeader
  100.  andPlaceHolder:(NSString *)aPlaceHolder
  101.    andInputView:(UIView *)aView
  102.      andToolbar:(UIToolbar *)aToolbar;
  103.  
  104. - (void) setValue:(NSString *)aValue;
  105.  
  106. @end
  107.        
  108. @implementation EditableLabelCell
  109.  
  110. @synthesize placeHolderLabel, editableLabel;
  111.  
  112. - (void) dealloc {
  113.     [placeHolderLabel release];
  114.     [editableLabel release];
  115.     [super dealloc];
  116. }
  117.  
  118. - (void) setTag:(CellTag)aTag andHeader:(NSString *)aHeader andPlaceHolder:(NSString *)aPlaceHolder andInputView:(UIView *)aView andToolbar:(UIToolbar *)aToolbar {
  119.     [super setTag:aTag andHeader:aHeader andEditPoint:self.editableLabel];
  120.     self.placeHolderLabel.text = aPlaceHolder;
  121.     [self.editableLabel setInputView:aView andToolbar:aToolbar];    
  122. }
  123.  
  124. - (void) setValue:(NSString *)aValue {
  125.     if (aValue && aValue != @"") {                
  126.         self.placeHolderLabel.hidden = YES;
  127.         self.editableLabel.text = aValue;        
  128.     } else {
  129.         self.editableLabel.text = nil;
  130.         self.placeHolderLabel.hidden = NO;
  131.     }
  132. }
  133.  
  134. @end
  135.        
  136. @protocol EditableGenderCellDelegate <NSObject>
  137. @required
  138.   - (NSString *) getTextForGender:(Gender)aGender;
  139.   - (void) genderChangedTo:(Gender)aGender forTag:(CellTag)aTag;
  140. @end
  141.  
  142. @interface EditableGenderCell : EditableLabelCell <UITableViewDataSource, UITableViewDelegate> {
  143.     id<EditableGenderCellDelegate> delegate;    
  144.     Gender gender;
  145.     IBOutlet UITableView *genderTable;
  146.     IBOutlet UIToolbar *doneBar;
  147. }
  148.  
  149. - (void) setTag:(CellTag)aTag
  150.     andDelegate:(id<EditableGenderCellDelegate>)aDelegate
  151.       andHeader:(NSString *)aHeader
  152.       andGender:(Gender)aGender
  153.  andPlaceHolder:(NSString *)aPlaceHolder;
  154.  
  155. @property (nonatomic, retain) id<EditableGenderCellDelegate> delegate;
  156. @property (nonatomic) Gender gender;
  157. @property (nonatomic, retain) UITableView *genderTable;
  158. @property (nonatomic, retain) UIToolbar *doneBar;
  159.  
  160. @end
  161.        
  162. @implementation EditableGenderCell
  163.  
  164. @synthesize delegate, gender, genderTable, doneBar;
  165.  
  166. - (void) dealloc {
  167.     [delegate release];
  168.     [genderTable release];
  169.     [doneBar release];
  170.     [super dealloc];
  171. }
  172.  
  173. - (void) setTag:(CellTag)aTag andDelegate:(id<EditableGenderCellDelegate>)aDelegate andHeader:(NSString *)aHeader andGender:(Gender)aGender andPlaceHolder:(NSString *)aPlaceHolder {
  174.     [super setTag:aTag andHeader:aHeader andPlaceHolder:aPlaceHolder andInputView:self.genderTable andToolbar:self.doneBar];
  175.     self.delegate = aDelegate;
  176.     self.gender = aGender;
  177.     [super setValue:[self.delegate getTextForGender:aGender]];
  178. }
  179.  
  180. #pragma mark - Table view data source
  181.  
  182. - (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
  183.     return 1;
  184. }
  185.  
  186. - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  187.     return 2;
  188. }
  189.  
  190. - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  191.     static NSString *CellIdentifier = @"Cell";
  192.  
  193.     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  194.     if (cell == nil) {
  195.         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
  196.     }
  197.  
  198.     switch (indexPath.row) {
  199.         case MALE:
  200.             switch (self.gender) {
  201.                 case MALE:
  202.                     cell.accessoryType = UITableViewCellAccessoryCheckmark;    
  203.                     break;
  204.                 default:
  205.                     cell.accessoryType = UITableViewCellAccessoryNone;  
  206.             }
  207.             break;
  208.         case FEMALE:
  209.             switch (self.gender) {
  210.                 case FEMALE:
  211.                     cell.accessoryType = UITableViewCellAccessoryCheckmark;    
  212.                     break;
  213.                 default:
  214.                     cell.accessoryType = UITableViewCellAccessoryNone;
  215.             }  
  216.             break;
  217.     }
  218.  
  219.     cell.textLabel.text = [self.delegate getTextForGender:indexPath.row];
  220.     cell.selectionStyle = UITableViewCellSelectionStyleNone;
  221.  
  222.     return cell;
  223. }
  224.  
  225. #pragma mark - Table view delegate
  226.  
  227. - (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  228.     self.gender = indexPath.row;
  229.     [super setValue:[self.delegate getTextForGender:self.gender]];
  230.     [self.delegate genderChangedTo:self.gender forTag:self.tag];  
  231.     [tableView reloadData];
  232. }
  233.  
  234. @end
  235.        
  236. @interface GenderPickerTableViewCell : UITableViewCell
  237. {
  238.     UISegmentedControl *genderPickerSegmentedControl;
  239. }
  240.  
  241. @property (nonatomic, retain) IBOutlet UISegmentedControl *genderPickerSegmentedControl;
  242.  
  243. @end
  244.        
  245. #import "GenderPickerTableViewCell.h"
  246.  
  247.  
  248. @implementation GenderPickerTableViewCell
  249.  
  250. @synthesize genderPickerSegmentedControl;
  251.  
  252. #pragma mark -
  253. #pragma mark memory management
  254.  
  255. - (void)dealloc
  256. {  
  257.     [genderPickerSegmentedControl release];
  258.  
  259.     [super dealloc];
  260. }
  261.  
  262. #pragma mark -
  263. #pragma mark initialization
  264.  
  265. - (void)awakeFromNib
  266. {
  267.     // initialization goes here, for example preselect a specific gender
  268. }
  269.  
  270. @end
  271.        
  272. #pragma mark -
  273. #pragma mark view lifecycle
  274.  
  275. - (void)viewDidLoad
  276. {
  277.     [super viewDidLoad];
  278.     tableView.rowHeight = 100.0;
  279.     tableView.dataSource = self;
  280.     tableView.delegate = self;
  281. }
  282.  
  283. #pragma mark -
  284. #pragma mark UITableView methods
  285.  
  286. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  287. {
  288.     return 1;
  289. }
  290.  
  291. - (UITableViewCell *) tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)anIndexPath
  292. {
  293.     GenderPickerTableViewCell *cell = [TableViewCellFactory genderPickerTableViewCellWithTableView:aTableView];
  294.  
  295.     [cell.genderPickerSegmentedControl addTarget:self
  296.                                           action:@selector(genderPicked:)
  297.                                 forControlEvents:UIControlEventValueChanged];
  298.  
  299.     return cell;
  300. }
  301.  
  302. #pragma mark -
  303. #pragma mark UISegmentedControl action
  304.  
  305. - (void)genderPicked:(id)sender
  306. {
  307.     UISegmentedControl *segmentedControl = (UISegmentedControl *)sender;
  308.  
  309.     NSLog(@"selected index: %d", [segmentedControl selectedSegmentIndex]);
  310. }
  311.        
  312. -(IBAction)textFieldDidBeginEditing:(UITextField *)textField { //Keyboard becomes visible
  313. [UIView beginAnimations:nil context:NULL];
  314. [UIView setAnimationBeginsFromCurrentState:YES];
  315. [UIView setAnimationDuration:0.3];
  316. self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y - 50, self.view.frame.size.width, self.view.frame.size.height);
  317. [UIView commitAnimations];