我正在尝试使用内置聊天功能创建应用。我试图让它与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;
}
}
总而言之,我要问的是如何修改它,当我切换UISegmentedControl时它会改变在交换机处于此状态时键入的消息。 提前谢谢!
答案 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。祝你好运!