在UIView中将UITextView添加为子视图,然后添加到UIScrollView

时间:2009-05-28 17:23:55

标签: iphone cocoa-touch uiview uiscrollview uitextview

我有UIViewControllerContentViewController)连接到View xib。我在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中的视图上,当我滚动页面时它们都在那里。上面的文字也在标签上设置。 textview在第一页后消失。我也无法设置它的文字。我已将新的textview拖到UIView上,它也会在第一页后消失。我需要为textview做些什么吗?


我发现每页都有UIScrollView。如果我在滚动视图所在的位置垂直滑动,则会显示文本。但是我必须在第一个之后的所有滚动视图中这样做。

但是,一旦我滑动它们,文本将一直显示,直到应用程序重新启动。如果没有足够的文本来导致滚动,则文本视图将永远不会出现。有关此行为的任何建议吗?

1 个答案:

答案 0 :(得分:1)

尝试:

[textView setNeedsDisplay];


原始答案

您不必以不同方式处理textview。

我首先担心你的“loadview”。你永远不应该直接打电话。它在需要时自动调用。

此外,您应该在循环之前声明contentview并且您正在泄漏内存。

您的另一个问题是您在循环期间从不更改每个视图的帧。它们的起源都是{0,0}。据我所知,从您的代码中可以看出。这可能就是隐藏您的观点的原因。

最后,在样式说明中,我不会叫我视图控制器XXXXXview,他们应该在其中有单词控制器。

    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。开始注释掉影响textView的任何行,看看会发生什么。