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

问题描述:

我有一个连接到View xib的UIViewControllerContentViewController)。我在UIView上删除了一个TextView,它在IB层次结构中显示为子视图。
ContentViewController有一个标签作为插座,连接到ContentView.xib上的标签。当下面的代码执行时,第一个视图显示文本视图,但滚动浏览其他视图/页面只显示标签。在UIView中添加UITextView作为子视图,然后添加到UIScrollView

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在第一页后消失。我也无法设置其文本。我已经将一个新的文本视图拖到UIView上,并且它在第一页之后也会消失。有什么不同的我需要为textview做些什么?


我发现UIScrollView在每页上。如果我在滚动视图处垂直滑动,则会显示文本。但是我必须在第一个之后为所有的滚动条做到这一点。

但是,一旦我滑动它们,文本将保持可见状态,直到应用程序重新启动。如果没有足够的文本导致滚动,textview将永远不会显示。对此行为有何建议?

尝试:

[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内容查看框架属性:

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

要添加更多:

尝试添加TextView的编程在viewDidLoad中或viewDidAppear到看看是否有效。

你的意见后,如果我不得不采取另一种猜测,我会说你可能会在你的代码中的其他地方操纵textView后添加。开始评论任何影响textView的行,看看会发生什么。

+0

不是viewDidLoad,loadView。调用viewDidLoad有时是诡计,但不是loadView(AFAIK)。 另外,您是否将scrollView的contentView大小设置为: (numberOfContentViews * contentViewWidth)? – 2009-05-28 18:31:00

+0

谢谢。调用viewDidLoad是暂时的,直到我得到textview的工作。否则,我将不得不创建非iBOutlet属性,然后在viewDidLoad期间进行分配。在第一次查看代码后,textview仍然不显示。标签仍然显示正常。我还可以添加一个UIWebView和UIScrollView,并在其中添加一个标签。它们显示在所有页面上。 – 4thSpace 2009-05-28 18:34:00

+0

是(numberOfContentViews * contentViewWidth)问题。内容视图显示正常。我可以将控件放置在每个角落并看到它们。我也尝试在中间放置一个textview,但是它在第一个视图后消失。 – 4thSpace 2009-05-28 18:38:30