将 UITextView 添加为 UIView 中的子视图,然后添加到 UIScrollView
Posted
技术标签:
【中文标题】将 UITextView 添加为 UIView 中的子视图,然后添加到 UIScrollView【英文标题】:Adding UITextView as subview in UIView then to UIScrollView 【发布时间】:2009-05-28 17:23:54 【问题描述】:我有一个连接到 View xib 的 UIViewController
(ContentViewController
)。我在UIView
上放了一个TextView
,它在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 在第一页后消失。我也无法设置它的文本。我已经将一个新的文本视图拖到UIView
上,它在第一页之后也消失了。我需要为 textview 做些什么不同的事情吗?
我发现UIScrollView
在每一页上。如果我在滚动视图所在的位置垂直滑动,则会出现文本。但是我必须对第一个之后的所有滚动视图都这样做。
但是,一旦我滑动它们,文本仍然可见,直到应用程序重新启动。如果没有足够的文本导致滚动,则 textview 将永远不会出现。对此行为有何建议?
【问题讨论】:
【参考方案1】:试试:
[textView setNeedsDisplay];
原答案
您不必以不同的方式处理文本视图。
我首先担心您对“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 frame 属性:
scrollView.contentSize = CGSizeMake(numberOfContentViews*contentViewWidth, contentViewHeight);
添加更多:
尝试以编程方式在 viewDidload 或 viewDidAppear 中添加 textView 以查看是否有效。
在您的 cmets 之后,如果我不得不再次猜测,我会说您可能会在添加 textView 后在代码中的其他位置对其进行操作。开始注释掉任何影响 textView 的行,看看会发生什么。
【讨论】:
不是 viewDidLoad,loadView。调用 viewDidLoad 有时是必要的,但不是 loadView (AFAIK)。另外,您是否将滚动视图的 contentView 大小设置为:(numberOfContentViews*contentViewWidth)? 谢谢。在我让 textview 工作之前,调用 viewDidLoad 是暂时的。否则,我将不得不创建非 iBOutlet 属性,然后在 viewDidLoad 期间进行分配。在您的代码的第一个视图之后,文本视图仍然不显示。标签仍然显示正常。我还可以在其中添加带有标签的 UIWebView 和 UIScrollView。它们显示在所有页面上。 是的 (numberOfContentViews*contentViewWidth) 问题。内容视图显示正常。我可以在每个角落放置控件并查看它们。我也尝试在中间放置一个文本视图,但在第一个视图后它消失了。 您可以尝试在 viewDidLoad 中以编程方式添加 textView,看看您是否有同样的问题。以上是关于将 UITextView 添加为 UIView 中的子视图,然后添加到 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章