我试图在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"];
}
但是我不确定如何使用此更新数据刷新标签。
答案 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];
}