2010-11-16 103 views
1

我有一个UITabBar应用程序,它有三个选项卡。第一个选项卡带有一个带有UIButton的UIViewController,它显示一个模式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:一切OK和驳回模式的看法,但它不会更新SearchViewController的UIButton的标签为“HELLO-TEST”。我相信我在这里错过了简单的东西...

请帮助我!

谢谢:)

回答

3

在您的主视图控制器,你需要通过“自我”参考搜索日期选择器视图控制器,然后设置为在搜索日期选取器的主视图控制器伊娃在搜索日期选择器视图的pickDate方法中查看并使用该引用。请看看去年我的博客中对这个确切主题:

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

+0

英国石油公司,你是一个壁架。我用你的博客文章来解决这个问题。我在辅助视图控制器中声明了主视图控制器 - 就像你做的那样(并修改了我的代码以反映这一点)。然后,我运行了应用程序,但没有更新文本(或记录任何内容),因此我重新检查了代码并注意到我错过了将辅助视图中声明的主视图控制器设置为'self'的引用。没有,而鲍勃是我的父亲兄弟。干杯:) – a1phanumeric 2010-11-16 15:31:01

+0

您可以随时点击我答案旁边的小复选标记,将其标记为接受的答案。 ;) – 2010-11-16 21:53:55

2

如果你知道如何实现自定义的委托方法是很容易的。只需在选择器视图中用你想要的参数(它假定是在获得值的地方进行委派)定义委托方法,然后在你的UIViewController中定义调用此方法并从委派消息中分配值。如果你想要一些例子,我可以给你一些。

相关问题