vendredi 3 février 2012

Une date réutilisables Drill-Down Controller

L'autre jour, j'ai posté un réutilisables à base de tableaux de drill-down de contrôleur. Aujourd'hui, je poste un autre dans ma série de re-utilisables de drill-down contrôleurs: une date réutilisables drill-down.

Pour utiliser ce contrôleur, conçu pour être utilisé comme un drill-down dans une application de navigation basée sur tout ce que vous avez à faire est de créer une instance de la classe, et mis en déléguer cette instance à l'auto, puis réglez la date à afficher quand il est d'abord montré, comme ceci:

DateViewController *controller = [[DateViewController alloc] init];
controller.delegate = self;
controller.date = theDateToBeEdited;
[delegate.rootController pushViewController:controller animated:YES];
[controller release];

Ensuite, mettre en œuvre cette méthode déléguée:

- (void)takeNewDate:(NSDate *)newDate
{
myObject.date = newDate;
}

Maintenant, lorsque le contrôleur de drill-down est rejetée, si l'utilisateur appuyait sur le bouton Enregistrer, que takeNewDate: méthode sera appelée avec la nouvelle valeur, et tout ce que vous avez à faire est bâton de la nouvelle date de retour dans votre modèle de données. La classe du contrôleur est autonome, et il n'y a aucun besoin de modifier la classe du contrôleur du tout (mais n'hésitez pas à étendre sur elle si vous voulez). Si vous souhaitez personnaliser l'apparence du sélecteur de date, vous pouvez utiliser la propriété DatePicker du contrôleur, par exemple, pour changer le mode le sélecteur de date de:

controller.datePicker.datePickerMode = UIDatePickerModeDateAndTime;

Voici la classe sélecteur de date:

DateViewController.h
/*
DateViewController.h
*/


#import <UIKit/UIKit.h>
#import "Person.h"

@protocol DateViewDelegate <NSObject>
@required
- (void)takeNewDate:(NSDate *)newDate;
- (UINavigationController *)navController; // Return the navigation controller
@end


@interface DateViewController : UIViewController {
UIDatePicker *datePicker;
NSDate *date;

id <DateViewDelegate> delegate; // weak ref
}
@property (nonatomic, retain) IBOutlet UIDatePicker *datePicker;
@property (nonatomic, retain) NSDate *date;
@property (nonatomic, assign) id <DateViewDelegate> delegate;
-(IBAction)dateChanged;
@end


DateViewController.m
/*
DateViewController.m
*/

#import "DateViewController.h"
#import "BirthdaysCategories.h"

@implementation DateViewController
@synthesize datePicker;
@synthesize date;
@synthesize delegate;

-(IBAction)dateChanged
{
self.date = [datePicker date];
}
-(IBAction)cancel
{
[[self.delegate navController] popViewControllerAnimated:YES];
}
-(IBAction)save
{
[self.delegate takeNewDate:date];
[[self.delegate navController] popViewControllerAnimated:YES];
}
- (void)loadView
{
UIView *theView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = theView;
[theView release];


UIDatePicker *theDatePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 206.0, 320.0, 216.0)];
self.datePicker = theDatePicker;
[theDatePicker release];
[datePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:datePicker];


UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]
initWithTitle:@"Cancel"
style:UIBarButtonItemStylePlain
target:self
action:@selector(cancel)]
;
self.navigationItem.leftBarButtonItem = cancelButton;
[cancelButton release];
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc]
initWithTitle:@"Save"
style:UIBarButtonItemStylePlain
target:self
action:@selector(save)]
;
self.navigationItem.rightBarButtonItem = saveButton;
[saveButton release];

self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];

}

- (void)viewWillAppear:(BOOL)animated
{
if (self.date != nil)
[self.datePicker setDate:date animated:YES];
else
[self.datePicker setDate:[NSDate date] animated:YES];

[super viewWillAppear:animated];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (void)dealloc {
[datePicker release];
[date release];
[super dealloc];
}
@end



Aucun commentaire: