问题描述
|
我正在使用UIScrollView在UITextView后面创建衬纸错觉(我必须使用单独的UIScrollView,以便可以留有边距)。为了以正确的行数绘制纸张,我需要将其传递给UITextView的“ 0”。
这是目前发生的情况:
用户从父视图控制器中的表中选择一个注释。
父视图控制器设置了textview.text属性,以便我的UITextView知道要显示什么文本。
如果我在ѭ1中设置UIScrollView,则由于尚未设置textView.text,因此它将无法工作,因此textView.contentSize.height为零。但是,如果我在
viewDidAppear
中进行了设置,尽管可以工作,但这些行会在文本后面出现一会儿。
解决这个问题的正确方法是什么?
解决方法
只需在推子视图控制器之前尝试设置属性。
我假设您的代码类似于父视图控制器中的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIViewController* childViewController = ...
[self.navigationController pushViewController:childViewController animated:YES];
childViewController.text = ...
[childViewController release];
}
也许只是尝试
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIViewController* childViewController = ...
childViewController.text = ...
[self.navigationController pushViewController:childViewController animated:YES];
[childViewController release];
}
, 您应该在-viewDidLoad
中初始化所有视图...
确实,在调用-viewDidLoad
的那一刻之前,您的视图尚未完全加载。
如果需要在控制器之间传递数据,则可以在其中一个控制器中定义属性并设置其值。另一个控制器将在需要时读取该属性。
具体来说,在-viewDidLoad
中,您可以使用属性中存储的值来初始化UI项。
, 您想要的是子视图控制器上的一个简单的NSString *noteText
ivar,并使之像ѭ9a这样的属性并进行合成。然后按照gcamp的建议执行以下操作:
YourChildController *childVC = ...
child.noteText = @\"your selected note text here\";
[self.navigationController pushViewController:childVC animated:YES];
[childVC release];
然后在YourChildController viewDidLoad中:
myTextView.text = noteText;
[myTextView sizeToFit]; // not sure if you need to do this or not
// now you can setup your background scroll view as needed
如果这样不起作用,则可以尝试在viewWillAppear:方法中设置滚动视图。