UISegmentedControl在聊天情境中切换身份

时间:2011-08-20 21:17:17

标签: iphone objective-c cocoa-touch chat uisegmentedcontrol

我正在尝试使用内置聊天功能创建应用。我试图让它与Messages应用程序类似,但有一个主要区别。我没有为MMS提供相机图标,而是想添加一个UISegmentedControl来手动切换您在对话中的哪个人。我有它工作得非常好,除非你在交换机上更改身份,它会改变之前在聊天中所说的所有内容的身份。我真的很沮丧,任何帮助都会非常感激。

    NSString *text = [messages objectAtIndex:indexPath.row];
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:14.0] constrainedToSize:CGSizeMake(240.0f, 480.0f) lineBreakMode:UILineBreakModeWordWrap];

UIImage *balloon;



if(segmentedControl.selectedSegmentIndex == 0) {

    balloonView.frame = CGRectMake(320.0f - (size.width + 28.0f), 2.0f, size.width + 28.0f, size.height + 15.0f);
    balloon = [[UIImage imageNamed:@"green.png"] stretchableImageWithLeftCapWidth:24 topCapHeight:15];
    label.frame = CGRectMake(307.0f - (size.width + 5.0f), 8.0f, size.width + 5.0f, size.height); 
}
else if(segmentedControl.selectedSegmentIndex == 1) {
    balloonView.frame = CGRectMake(0.0, 2.0, size.width + 28, size.height + 15);
    balloon = [[UIImage imageNamed:@"grey.png"] stretchableImageWithLeftCapWidth:24 topCapHeight:15];
    label.frame = CGRectMake(16, 8, size.width + 5, size.height);

}



balloonView.image = balloon;
label.text = text;

return cell;

}

 -(IBAction) segmentedControlIndexChanged {
switch (self.segmentedControl.selectedSegmentIndex) 
{
    case 0: (self.segmentedControl.selectedSegmentIndex == 0);


    case 1: (self.segmentedControl.selectedSegmentIndex == 1);

        break;

    default:
        break;
}

}

Image 1 Image 2

总而言之,我要问的是如何修改它,当我切换UISegmentedControl时它会改变在交换机处于此状态时键入的消息。 提前谢谢!

2 个答案:

答案 0 :(得分:2)

这是psuedo-code。

1。)为此视图添加分段控件到IB 2.)创建以下IBAction:

-(IBAction)segmentedControlValueDidChange:(id)sender
{
       if(self.segmentedControl.selectedSegmentIndex == 0)
       {
             //this is a BOOL which your app uses to know which side to create the balloons for a new text bubble
             ballonsAppearOnLeft = YES;
       }
       else
             ballonsAppearOnLeft = NO;


}

3.。)在IB中单击您的分段控件并将“valueChanged”定位到上述函数,现在只要单击分段按钮上的值,该函数就会触发 4.)对于你的聊天功能,我不知道它是如何工作的...我认为它是这样的

-(void)addNewChat:(NSString*)chatText
{
      if(ballonsAppearOnLeft)
      {
           [self createBallonOnLeftWithText:chatText];
      }
      else
           [self createBallonOnRightWithText:chatText];


}

答案 1 :(得分:1)

这是我认为错的。首先,您需要更改IBAction功能,因为它不会执行任何操作。这就是它的翻译:

-(IBAction) segmentedControlIndexChanged {
  if(self.segmentedControl.selectedSegmentIndex == 0) 
  {
      self.segmentedControl.selectedSegmentIndex == 0;
  } 
      else if (self.segmentedControl.selectedSegmentIndex == 1)
  {
      self.segmentedControl.selectedSegmentIndex == 1;
  }
}

我希望你能同意我的意见,这样做什么都没有;它正在做的是检查索引是否是你想要的,然后如果它只是再次检查它。也许你希望它被改变(只有一个等号,但这也没有意义)??,但无论哪种方式都无法解决你的问题。

其次,在类中创建一个布尔值(称之为leftSideConversation),如果selectedSegmentedIndex最初设置为0则将其初始化为TRUE,如果将其设置为0则将其初始化为FALSE。然后将代码的IBAction部分修改为如下所示:

-(IBAction) segmentedControlIndexChanged {
  if(self.segmentedControl.selectedSegmentIndex == 0) 
  {
      leftSideConversation = TRUE;
  } 
      else if (self.segmentedControl.selectedSegmentIndex == 1)
  {
      leftSideConversation = FALSE;
  }
}

第三,你需要做的是创造身份......你需要知道谁在输入什么。我无法帮助你,因为我不知道它是如何编程的,但你需要找到一种方法。代码中的以下部分也是错误的。段索引在整个会话期间保持不变,并且仅在您按下按钮时才会更改。因此,对话总是在一边,从你提供的快照判断,似乎一直是这种情况。从以下代码更改此部分代码:

if(segmentedControl.selectedSegmentIndex == 0) {

balloonView.frame = CGRectMake(320.0f - (size.width + 28.0f), 2.0f, size.width + 28.0f, size.height + 15.0f);
balloon = [[UIImage imageNamed:@"green.png"] stretchableImageWithLeftCapWidth:24 topCapHeight:15];
label.frame = CGRectMake(307.0f - (size.width + 5.0f), 8.0f, size.width + 5.0f, size.height); 
}
else if(segmentedControl.selectedSegmentIndex == 1) {
    balloonView.frame = CGRectMake(0.0, 2.0, size.width + 28, size.height + 15);
   balloon = [[UIImage imageNamed:@"grey.png"] stretchableImageWithLeftCapWidth:24 topCapHeight:15];
    label.frame = CGRectMake(16, 8, size.width + 5, size.height);
}

看一下这个问题:

if(myText == leftSideConversation) {

balloonView.frame = CGRectMake(320.0f - (size.width + 28.0f), 2.0f, size.width + 28.0f, size.height + 15.0f);
balloon = [[UIImage imageNamed:@"green.png"] stretchableImageWithLeftCapWidth:24 topCapHeight:15];
label.frame = CGRectMake(307.0f - (size.width + 5.0f), 8.0f, size.width + 5.0f, size.height); 
}
else {
    balloonView.frame = CGRectMake(0.0, 2.0, size.width + 28, size.height + 15);
   balloon = [[UIImage imageNamed:@"grey.png"] stretchableImageWithLeftCapWidth:24 topCapHeight:15];
    label.frame = CGRectMake(16, 8, size.width + 5, size.height);
}

其中myText是一个布尔值,它伴随着每个键入的消息,如果发送消息则myText设置为TRUE,如果收到消息则设置为FALSE。祝你好运!