我正在使用NSNotification,并且当通知到达其他类时,我想在GUI中进行更改。
这是我发布通知的方式,我不确定这是否是发布通知的好方法?
[[NSNotificationCenter defaultCenter]
postNotificationName:@"postDetailsNotification"
object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys: result, @"arrayDetails", nil]];
所以在其他 class ,我会像这样。
-(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的高度没有改变。关于iboutlets没问题,因为如果我在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上工作,但它也没有工作。
我真的很困惑,将很高兴获得任何帮助。
谢谢。
最佳答案
通知在其发布的同一线程上发送/接收。
如果日志一切正常,则好像您的相框被其他东西重新设置了。通常使用此选项的是自动布局-如果您使用的是自动布局,则无需通过设置框架来调整尺寸,而可以通过更新约束来调整尺寸。否则,设置框架会触发布局遍历,该布局遍历会将框架重置回原来的位置。