我正在使用UIScrollView在我的UITextView后面创建衬纸的错觉(我必须使用单独的UIScrollView,因此我可以有边距)。为了使用正确的行数绘制纸张,我需要将它传递给UITextView的contentSize.height
。
以下是目前发生的事情:
如果我在viewWillAppear
中设置了我的UIScrollView,它将无法正常工作,因为尚未设置textView.text,因此textView.contentSize.height为零。但是,如果我在viewDidAppear
中进行设置,虽然它有效,但这些行会在文本后面显示。
解决这个问题的正确方法是什么?
答案 0 :(得分:1)
只需在推送子视图控制器之前尝试设置属性。
我假设您的代码类似于父视图控制器:
- (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];
}
答案 1 :(得分:1)
您应该在-viewDidLoad
中初始化所有观看次数...
确实,在调用-viewDidLoad
之前,您的视图尚未完全加载。
如果需要在控制器之间传递数据,可以在其中一个控制器中定义属性并设置其值。另一个控制器会在需要时读取该属性。
具体来说,在 - viewDidLoad
中,您可以使用属性中存储的值来初始化您的UI项目。
答案 2 :(得分:1)
你想要的是在子视图控制器上的一个简单的NSString *noteText
ivar,并使它像@property (nonatomic, copy) NSString *noteText
这样的合成并合成它。然后,正如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:方法中设置您的滚动视图。