我正在使用NSNotification,当通知到达其他类时,我想改变GUI中的某些东西。 这是我发布通知的方式,我不确定是否发布它是好方法?
[[NSNotificationCenter defaultCenter]
postNotificationName:@"postDetailsNotification"
object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys: result, @"arrayDetails", nil]];
所以在其他课程中,我就这样抓住它。
-(void)registerNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receivePostDetailsNotification:)
name:@"postDetailsNotification"
object:nil ];
}
- (void) receivePostDetailsNotification:(NSNotification *) notification
{
NSDictionary * info = [notification userInfo];
inputDetails = [info objectForKey:@"arrayDetails"];
NSLog(@"notification arriveddd=%@",[[inputDetails PostDetail] Text]);
[self customTxtMessageViewHeight];
}
在customTXtMessageViewHelight方法中,我只检查txtMessage的内容大小(它是一个textview),然后我调整它的大小。
-(void)customTxtMessageViewHeight
{
CGFloat fl;
//MeasureHeightOfUITextView is a method to count textview height and it works without problem
fl=[nesneResizeTextViewHeight measureHeightOfUITextView:txtMessage ];
txtMessage.frame=CGRectMake(txtMessage.frame.origin.x, txtMessage.frame.origin.y, txtMessage.frame.size.width, fl);
imgMessageBackground.frame=CGRectMake(imgMessageBackground.frame.origin.x, imgMessageBackground.frame.origin.y, imgMessageBackground.frame.size.width, fl);
NSLog(@"size1=%fl",fl);
NSLog(@"textviewsize=%fl",txtMessage.frame.size.height);
}
日志正确但txtMessage的高度不会改变。 iboutlet没有问题,因为如果我在viewDidLoad方法中尝试它,txtMessage的高度会发生变化。
所以,经过一些阅读文章,我得到它NSNotification在后台线程工作,我试图像这样调用customTxtMessageViewHeight方法;
[self performSelectorOnMainThread:@selector(customTxtMessageViewHeight) withObject:self waitUntilDone:NO];
但没有改变。 之后我试图改变我发布NSNotification的方式
dispatch_async(dispatch_get_main_queue(),^{
[[NSNotificationCenter defaultCenter]
postNotificationName:@"postDetailsNotification"
object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys: result, @"masivDetails", nil]];
});
我认为它会使它在mainThread上工作,但它也没有用。 我真的很困惑,很乐意提供任何帮助。 感谢。
答案 0 :(得分:0)
通知在发布的同一个帖子上发送/接收。
如果日志都很好,那么看起来您的框架正在被其他东西重新设置。通常的候选人是Autolayout - 如果您正在使用Autolayout,那么您不会通过设置框架来调整大小,您可以通过更新约束来调整它们的大小。否则,设置框架会触发布局传递,将框架重置回到原来的位置。