2011-08-20 50 views
1

我正在尝试创建一个具有内置聊天功能的应用程序。我试图使其与Messages应用程序的工作类似,但有一个主要区别。而不是MMS的摄像头图标我想添加一个UISegmentedControl来手动切换你正在谈话的人。除非您在交换机上更改身份,否则我的工作状况非常好,它会更改聊天中以前所说的所有内容的身份。我真的坚持这一点,任何帮助将不胜感激。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会在交换机仅处于此状态时更改输入的消息。 提前谢谢!

+0

您的分段控件是否支持使用UI切换的方法?我认为你所需要做的就是将一个方法连接到nib下的valueChanged选项下,并且当这个段改变时,这个方法会被调用,并且你可以更新UI。希望有所帮助! – msgambel

回答

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;如果设置为1,则将其初始化为FUESE。然后修改代码中的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。祝你好运!

2

这里是伪代码。

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]; 


} 
相关问题