UISegmentedControl для переключения между идентичностями в ситуации чата - PullRequest
1 голос
/ 21 августа 2011

Я пытаюсь создать приложение со встроенной функцией чата. Я пытаюсь заставить его работать аналогично приложению Сообщения, с одним существенным отличием. Вместо того, чтобы иметь значок камеры для 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 ]

2 голосов
/ 29 августа 2011

Вот оно в псевдо-коде.

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 голос
/ 04 сентября 2011

Это то, что я считаю неправильным.Во-первых, вам нужно изменить функцию 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, и ЛОЖЬ, если он равен 1. Затем измените часть кода 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, если вы его получаете.Удачи!

...