NSNotification到达后我无法编辑任何内容的框架

时间:2014-05-28 07:30:45

标签: ios objective-c nsnotificationcenter nsnotifications

我正在使用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上工作,但它也没有用。 我真的很困惑,很乐意提供任何帮助。 感谢。

1 个答案:

答案 0 :(得分:0)

通知在发布的同一个帖子上发送/接收。

如果日志都很好,那么看起来您的框架正在被其他东西重新设置。通常的候选人是Autolayout - 如果您正在使用Autolayout,那么您不会通过设置框架来调整大小,您可以通过更新约束来调整它们的大小。否则,设置框架会触发布局传递,将框架重置回到原来的位置。