如何更新从后续视图中跨越所有视图的持久性UILabel

时间:2014-07-29 18:22:28

标签: ios objective-c uilabel

我试图在Tabbed应用程序预设上测试一些想法 - 我想要做的是将主视图90%容器用于后续视图(到目前为止工作正常)并且具有持久状态栏顶部显示可以从后续视图更新的UILabel,但是在更新标签时遇到问题。

在寻求解决方案时,我尝试了全局变量和协议方法。

虽然我可以在加载主视图时将标签文本设置为全局变量的标签文本,但是在后续视图中更改全局变量后,我无法弄清楚如何刷新标签。与协议方法类似,尝试在主视图中创建一个全局函数,该函数将在从后续视图调用时更新实例UILabel的属性。

如果有人能指出我正确的方向,我将非常感激。

修改

我尝试创建一个可以从后续视图中调用的公共函数:

GlobalContainerViewController.h

@interface GlobalContainerViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *statusLabel;

+ (void) updateLabel;

@end

GlobalContainerViewController.m

...
+ (void) updateLabel
{
    _statusLabel.text = [NSString stringWithFormat:@"updated"];
}

然而得到错误"实例变量' _statusLabel'在课堂方法中访问。

我还尝试使用全局变量来存储状态文本:

AppDelegate.h

NSString * statusVar;

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    statusVar = [NSString stringWithFormat:@"initialStatus"];
    return YES;
}

GlobalContainerViewController.m(将AppDelegate.h导入.h)

- (void)viewDidLoad
{
    [super viewDidLoad];
    _statusLabel.text = statusVar;
}

SecondViewController.m(将AppDelegate.h导入.h)

- (IBAction)updateStatusPressed:(id)sender {
    statusVar = [NSString stringWithFormat:@"Update"];
}

但是我不确定如何使用此更新数据刷新标签。

1 个答案:

答案 0 :(得分:0)

对于遇到同样问题的其他人,我已经使用通知解决了问题(Send and receive messages through NSNotificationCenter in Objective-C?) - 不确定这是否是最佳方式,但在此阶段是否符合我的需求:

GlobalContainerViewController.m

- (void)viewDidLoad
...
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(receiveTestNotification:)
                                             name:@"TestNotification"
                                           object:nil];

}

- (void) receiveTestNotification:(NSNotification *) notification
{

if ([[notification name] isEqualToString:@"TestNotification"])
    NSLog (@"Successfully received the test notification!");
NSDictionary * info = notification.userInfo;
NSString *statusString=info[@"status"];
NSLog(@"Name = '%@;",statusString);
_statusLabel.text = statusString;

}

SecondViewController.m

- (IBAction)updateStatusPressed:(id)sender {

statusVar = [NSString stringWithFormat:@"Update from 2nd view"];
NSDictionary * dict =[NSDictionary dictionaryWithObject:statusVar forKey:@"status"];
[[NSNotificationCenter defaultCenter]
 postNotificationName:@"TestNotification"
 object:self userInfo:dict];

}