在子视图2中全局变量更新后更新子视图1中的UILabel

时间:2013-08-09 01:10:51

标签: ios objective-c xcode uilabel containers

我已经制作了一个简单的应用程序来测试它并且无法解决这个问题。我有一个iPad故事板,我在其中放置了两个容器视图,如下所示。我在一个视图中有一个标签,在另一个视图中有一个按钮。我的按钮会增加标签,一次增加1个数字。

我的问题不是传递值或递增,而是让视图加载新值。 每个容器都有自己的ViewController

下面的一些代码,虽然非常稀疏,因为我写了一堆并删除,因为它不起作用。请帮助正确的格式。我想保留这种通用格式,更新按钮内的全局变量并更新标签。

LabelViewController.h

#import <UIKit/UIKit.h>

@interface LabelViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *checkLabel;

-(void)loadLabel;

@end

LabelViewController.m
#import "LabelViewController.h"
#import "ParentViewController.h"

@interface LabelViewController ()

@end

@implementation LabelViewController
@synthesize checkLabel;
-(void)loadLabel{
    checkLabel.text = [NSString stringWithFormat:@"%d",value];
    [self.view setNeedsDisplay];
}
- (void)viewDidLoad
{
    [self loadLabel];
    [super viewDidLoad];
}

ButtonViewController.h
#import <UIKit/UIKit.h>


@interface ButtonViewController : UIViewController
- (IBAction)checkButton:(id)sender;
@end

ButtonViewController.m
#import "ButtonViewController.h"
#import "ParentViewController.h"
#import "LabelViewController.h"

@interface ButtonViewController ()

@end

@implementation ButtonViewController
- (IBAction)checkButton:(id)sender {
    value++;
    NSLog(@"%d",value);
    LabelViewController *fnc = [[LabelViewController alloc] init];
    [fnc loadLabel];
}
- (void)viewDidLoad
{
    [super viewDidLoad];
}

图片: http://farm4.staticflickr.com/3822/9469907420_746db25b23_b.jpg

1 个答案:

答案 0 :(得分:0)

在ButtonViewController中,你不希望分配初始化LabelViewController的实例 - 屏幕上已经存在的实例。两个子视图控制器都在父控制器之前实例化。因此,您需要做的是获取对屏幕上的LabelViewController的引用。您可以使用self.parentViewController.childViewControllers [0](0可能必须为1 - 我不知道哪个控制器是哪个)。

 LabelViewController *fnc = self.parentViewController.childViewControllers[0];
 [fnc loadLabel];