J'ai une application UITabBar, qui a trois onglets. Le premier onglet a un UIViewController avec un UIButton qui affiche un UIViewController modal pour permettre à l'utilisateur de sélectionner une date. Je rencontre des problèmes pour mettre à jour le libellé de l'UIButton lorsque l'utilisateur a sélectionné la date choisie.Comment mettre à jour une étiquette UIButton à partir d'un autre contrôleur de vue
Mon principal Voir contrôleur .h/.m
#import <UIKit/UIKit.h>
@interface SearchViewController : UIViewController {
IBOutlet UIButton *butFromDate;
}
@property (nonatomic, retain) UIButton *butFromDate;
- (IBAction)pickDate:(id)sender;
@end
////////////////////////////////////////////
#import "SearchViewController.h"
#import "SearchDatePickerViewController.h"
@implementation SearchViewController
@synthesize butFromDate;
- (IBAction)pickDate:(id)sender{
SearchDatePickerViewController *sampleView = [[[SearchDatePickerViewController alloc] init] autorelease];
[sampleView setModalTransitionStyle:UIModalTransitionStylePartialCurl];
[self presentModalViewController:sampleView animated:YES];
}
- (void)dealloc {
[butFromDate release];
[super dealloc];
}
@end
Ensuite, ma fenêtre modale (avec un UIPicker, et un couple de UIBarButtons pour annuler ou enregistrer le choix de l'utilisateur) .h/.m ressemble à:
#import <UIKit/UIKit.h>
@interface SearchDatePickerViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> {
NSMutableArray *dates;
IBOutlet UIPickerView *picker;
}
@property (nonatomic, retain) NSMutableArray *dates;
@property (nonatomic, retain) UIPickerView *picker;
- (IBAction)cancelDatePick:(id)sender;
- (IBAction)pickDate:(id)sender;
@end
////////////////////////////////////////////
#import "SearchDatePickerViewController.h"
#import "SearchViewController.h"
#import "AppDelegate.h"
#import "Search.h"
@implementation SearchDatePickerViewController
@synthesize dates, picker;
- (IBAction)cancelDatePick:(id)sender{
[self dismissModalViewControllerAnimated:YES];
}
- (IBAction)pickDate:(id)sender{
HolidayCottagesAppDelegate *appDelegate = (HolidayCottagesAppDelegate *)[[UIApplication sharedApplication] delegate];
SearchViewController *searchView = [SearchViewController alloc];
appDelegate.currentSearch.fromDate = [dates objectAtIndex:[picker selectedRowInComponent:0]];
[searchView.butFromDate setTitle:@"HELLO-TEST" forState:UIControlStateNormal];
[self dismissModalViewControllerAnimated:YES];
}
- (void)viewDidLoad {
[super viewDidLoad];
NSDate* curDate = [NSDate date];
NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents* comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:curDate];
NSTimeZone* gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
dates = [[NSMutableArray alloc] init];
[comps setTimeZone:gmt];
[comps setWeekday:7];
int startCount = comps.week + 1;
int endCount = (((52 - startCount) + 52) + startCount);
for (startCount; startCount <= endCount; startCount++){
NSDate *tDate = [calendar dateFromComponents:comps];
[dates addObject:tDate];
[comps setWeek:startCount];
}
}
// OTHER SHIZZLE HERE BUT NOT REALLY NEEDED TO DISPLAY...
Alors, quand je clique sur le bouton Enregistrer, il court - (void) pickDate: tous ok et rejette le point de vue modal, mais il ne sera pas mettre à jour l'étiquette UIButton de SearchViewController à « BONJOUR-TEST ». Je suis sûr qu'il me manque quelque chose de simple ici ...
S'il vous plaît aidez-moi !!
Merci :)
BP, vous êtes un rebord. J'ai utilisé votre blog pour résoudre ce problème. J'ai déclaré le contrôleur de vue principal à l'intérieur du contrôleur de vue secondaire - comme vous l'avez fait (et modifié mon code pour refléter cela). J'ai ensuite exécuté l'application, mais elle n'a pas mis à jour le texte (ou rien enregistré), j'ai donc revérifié votre code et remarqué que j'ai manqué la référence où vous avez déclaré le contrôleur de vue principal dans la vue secondaire. A fait, et bob est mon frère pères. Salutations :) – a1phanumeric
Vous pouvez toujours cliquer sur la petite coche à côté de ma réponse pour le signaler comme réponse acceptée. ;) –