【问题标题】:How to update a UIButton label from another view controller如何从另一个视图控制器更新 UIButton 标签
【发布时间】:2011-05-10 20:23:30
【问题描述】:

我有一个 UITabBar 应用程序,它有三个选项卡。第一个选项卡有一个 UIViewController 和一个 UIButton,它显示一个模式 UIViewController 以允许用户选择一个日期。当用户选择他们选择的日期时,我无法更新 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...

因此,当我单击“保存”按钮时,它会运行 -(void)pickDate: all ok 并关闭模式视图,但不会将 SearchViewController 的 UIButton 标签更新为“HELLO-TEST”。我确定我在这里遗漏了一些简单的东西......

请帮帮我!!

谢谢:)

【问题讨论】:

    标签: iphone objective-c views delegation


    【解决方案1】:

    在您的主视图控制器中,您需要将“self”引用传递给搜索日期选择器视图控制器,然后在搜索日期选择器视图中为主视图控制器设置一个 ivar,并在 pickDate 中使用该引用搜索日期选择器视图的方法。请查看我去年关于这个确切主题的博客文章:

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

    【讨论】:

    • BP,你是一个壁架。我用你的博客文章来解决这个问题。我在辅助视图控制器中声明了主视图控制器 - 正如您所做的那样(并修改了我的代码以反映这一点)。然后我运行了该应用程序,但它没有更新文本(或记录任何内容),所以我重新检查了您的代码并注意到我错过了将辅助视图中声明的主视图控制器设置为“自我”的参考。比,而且鲍勃是我父亲的兄弟。干杯:)
    • 您可以随时单击我的答案旁边的小复选标记,将其标记为已接受的答案。 ;)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2012-06-25
        • 2016-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多