Добавление UITextView как подпредставления в UIView, а затем в UIScrollView - PullRequest
0 голосов
/ 28 мая 2009

У меня есть UIViewController (ContentViewController), подключенный к xib View. Я опускаю TextView на UIView, и он отображается как подпредставление в иерархии в IB.
ContentViewController имеет ярлык в качестве розетки, который подключен к ярлыку на ContentView.xib. Когда код, приведенный ниже, выполняется, первое представление показывает текстовое представление, но прокрутка других представлений / страниц показывает только метку.

for(int i=0; i< 5; i++){
  ContentViewController *contentView = [[ContentViewController alloc] initWithNibName:@"ContentView" bundle:[NSBundle mainBundle]]; 
  [contentView loadView];
  contentView.theLabel.text =[NSString stringWithFormat:@"hello again..%d", i];
  [self.scrollView addSubview:contentView.view];
}

Я могу перетащить кнопку или текстовое поле на представление в IB, и они все там, когда я прокручиваю страницы. Выше текст также указан на этикетке. Текстовое представление исчезает после первой страницы. Я также не могу установить его текст. Я перетащил новое текстовое представление на UIView, и оно исчезает и после первой страницы. Есть ли что-то другое, что мне нужно сделать для просмотра текста?


Я обнаружил, что UIScrollView есть на каждой странице. Если я проведу пальцем по вертикали в месте прокрутки, появится текст. Но я должен сделать это для всех прокруток после первого.

Однако, как только я их проведу, текст останется видимым, пока приложение не будет перезапущено. Если текста недостаточно для прокрутки, текстовое представление никогда не появится. Любые предложения по этому поведению?

1 Ответ

1 голос
/ 28 мая 2009

Попробуйте:

[textView setNeedsDisplay];


Оригинальный ответ

Вам бы не пришлось иметь дело с textview по-другому.

Сначала я беспокоюсь о том, что вы называете "loadview". Вы никогда не должны называть это напрямую. Он вызывается автоматически при необходимости.

Кроме того, вы должны объявить contentview перед циклом, и вы теряете память.

Другая ваша проблема в том, что вы никогда не меняете рамку каждого вида во время цикла. Все они имеют происхождение {0,0}. Насколько я вижу из вашего кода. Возможно, поэтому ваши взгляды скрыты.

Наконец, на заметке о стиле я бы не назвал меня контроллерами представления XXXXXview, в них должно быть слово controller.

    CGRect frame;
    ContentViewController *myContentViewController = nil;

    for(int i=0; i< 5; i++){
      myContentViewController = [[myContentViewController alloc] initWithNibName:@"ContentView" bundle:[NSBundle mainBundle]];

      frame = myContentViewController.view.frame;
      frame.origin.x=(frame.size.width*i);
      myContentViewController.view.frame=frame; 

      myContentViewController.theLabel.text =[NSString stringWithFormat:@"hello again..%d", i];
      [self.scrollView addSubview: myContentViewController.view];
      [myContentViewController release];
    }

Добавить: Также проверьте свойство кадра scrollviews contentView:

scrollView.contentSize = CGSizeMake(numberOfContentViews*contentViewWidth, contentViewHeight);

Чтобы добавить больше:

Попробуйте добавить текстовое представление программно в viewDidload или viewDidAppear, чтобы увидеть, работает ли это.

После ваших комментариев, если бы мне пришлось сделать еще одно предположение, я бы сказал, что вы можете манипулировать textView где-то еще в вашем коде после его добавления. Начните комментировать любые строки, которые влияют на textView, и посмотрите, что произойдет.

...