无法以编程方式设置 UILabel 文本
Can't set UILabel Text Programmatically
在我的 iOS 应用中,我试图在另一个视图中设置 UILabel 的文本。
我通过在应该更新时将 NSNotification 传递给 viewController 来做到这一点。我知道它正在正确接收消息,因为我记录了消息,但它没有出现在 UILabel 中(我在故事板中添加了它)。
这是我的代码:
ProcessingViewController.h
@property (weak, nonatomic) IBOutlet UILabel *progressMessage;
ProcessingViewController.m
- (void)viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateProgressDialog:) name:@"uploadProgress" object:nil];
}
-(void) updateProgressDialog: (NSNotification *) notification{
NSString *message = [notification object];
NSLog(@"received updateProgressDialog message of %@", message);
self.progressMessage.text = message;
[self.progressMessage setNeedsDisplay];
}
我的故事板:
对不起,我不太明白你的问题:
我的意思是你必须 viewController 并使用 NSNotificationCenter
将消息从 childViewController 传递到 parentViewController?那是cor
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateProgressDialog:) name:@"uploadProgress" object:nil];
}
但如果您想使用 NSNotificationCenter
发回消息
//childViewController.m
//i tried adding this to your code to test if the `NSNotificationCenter ` responds, and it is responding
[[NSNotificationCenter defaultCenter] postNotificationName:@"uploadProgress" object:@"Your message"];
虽然我认为您需要做的是确保您的更新处于主要状态..
-(void) updateProgressDialog: (NSNotification *) notification{
NSString *message = [notification object];
NSLog(@"received updateProgressDialog message of %@", message);
dispatch_async(dispatch_get_main_queue(), ^(void){
self.progressMessage.text = message;
});
}
编辑
好了,我因为在编辑我的答案时网速慢而被否决了。
通过离线诊断,我们确认这确实是在后台线程上收到的。在这种情况下,您可以 post 将通知发送到主队列,或者您可以让 updateProgressDialog
将 UI 更新分派到主队列:
-(void) updateProgressDialog: (NSNotification *) notification{
NSString *message = [notification object];
NSLog(@"received updateProgressDialog message of %@", message);
dispatch_async(dispatch_get_main_queue(), ^{
self.progressMessage.text = message;
});
}
在我的 iOS 应用中,我试图在另一个视图中设置 UILabel 的文本。
我通过在应该更新时将 NSNotification 传递给 viewController 来做到这一点。我知道它正在正确接收消息,因为我记录了消息,但它没有出现在 UILabel 中(我在故事板中添加了它)。
这是我的代码:
ProcessingViewController.h
@property (weak, nonatomic) IBOutlet UILabel *progressMessage;
ProcessingViewController.m
- (void)viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateProgressDialog:) name:@"uploadProgress" object:nil];
}
-(void) updateProgressDialog: (NSNotification *) notification{
NSString *message = [notification object];
NSLog(@"received updateProgressDialog message of %@", message);
self.progressMessage.text = message;
[self.progressMessage setNeedsDisplay];
}
我的故事板:
对不起,我不太明白你的问题:
我的意思是你必须 viewController 并使用 NSNotificationCenter
将消息从 childViewController 传递到 parentViewController?那是cor
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateProgressDialog:) name:@"uploadProgress" object:nil];
}
但如果您想使用 NSNotificationCenter
//childViewController.m
//i tried adding this to your code to test if the `NSNotificationCenter ` responds, and it is responding
[[NSNotificationCenter defaultCenter] postNotificationName:@"uploadProgress" object:@"Your message"];
虽然我认为您需要做的是确保您的更新处于主要状态..
-(void) updateProgressDialog: (NSNotification *) notification{
NSString *message = [notification object];
NSLog(@"received updateProgressDialog message of %@", message);
dispatch_async(dispatch_get_main_queue(), ^(void){
self.progressMessage.text = message;
});
}
编辑
好了,我因为在编辑我的答案时网速慢而被否决了。
通过离线诊断,我们确认这确实是在后台线程上收到的。在这种情况下,您可以 post 将通知发送到主队列,或者您可以让 updateProgressDialog
将 UI 更新分派到主队列:
-(void) updateProgressDialog: (NSNotification *) notification{
NSString *message = [notification object];
NSLog(@"received updateProgressDialog message of %@", message);
dispatch_async(dispatch_get_main_queue(), ^{
self.progressMessage.text = message;
});
}