2010-11-16 3 views
1

У меня есть приложение UITabBar, которое имеет три вкладки. Первая вкладка имеет UIViewController с UIButton, который отображает модальный UIViewController, чтобы позволить пользователю выбирать дату. У меня возникли проблемы с обновлением метки UIButton, когда пользователь выбрал выбранную дату.Как обновить метку UIButton с другого контроллера вида

Мой Главный контроллер Вид .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 

Тогда мое модальное окно (с UIPicker, и пару UIBarButtons, чтобы отменить или сохранить выбор пользователя) .h/.m выглядит следующим образом:

#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... 

Так что, когда я нажимаю на кнопку Сохранить, она работает - (недействительными) pickDate: все в порядке, и увольняет модальное представление, но оно не будет обновлять SearchViewController в UIButton метку «HELLO-TEST». Я уверен, что мне не хватает чего-то простого здесь ...

Пожалуйста, помогите мне!

Спасибо :)

ответ

3

В вашем главном контроллере представления, вам необходимо пройти «я» ссылку на контроллер представления выбора даты поиска, а затем настроить Ивар для основного контроллера представления в селекторе поиска по дате просматривать и использовать эту ссылку в методе pickDate для выбора даты поиска. Пожалуйста, проверьте запись в блоге моего с прошлого года на этой точной теме:

http://www.dosomethinghere.com/2009/10/04/passing-values-and-messages-between-views-on-iphone/

+0

BP, вы уступ. Я использовал ваше сообщение в блоге, чтобы исправить эту проблему. Я объявил главный контроллер представления внутри контроллера вторичного представления - как и вы (и изменил мой код, чтобы отразить это). Затем я запустил приложение, но он не обновлял текст (или ничего не записывал), поэтому я перепроверил ваш код и заметил, что я пропустил ссылку, в которой основной контроллер представления объявлен во вторичном представлении, установленном на «я». Сделал, и братья мои братья. Cheers :) – a1phanumeric

+0

Вы всегда можете щелкнуть маленькую галочку рядом с моим ответом, чтобы отметить это как принятый ответ. ;) –

2

Если вы знаете, как реализовать свой собственный метод делегата очень легко. Просто определите метод делегирования с нужным параметром (предположим, что он делегируется в месте, где вы получаете значения) в режиме выбора, а затем в вашем UIViewController определите вызов этого метода и присвоение значения из сообщения делегирования. Если вам нужен какой-то пример, я могу отправить вам несколько.