0

我正在使用 UIScrollView 在我的 UITextView 后面创建横格纸的错觉(我必须使用单独的 UIScrollView 以便我可以有边距)。为了以正确的行数绘制纸张,我需要将contentSize.heightUITextView 的传递给它。

这是目前发生的情况:

  1. 用户从父视图控制器的表中选择一个注释。
  2. 父视图控制器设置 textview.text 属性,因此我的 UITextView 将知道要显示的文本。

如果我在 中设置 UIScrollView viewWillAppear,它将无法工作,因为 textView.text 尚未设置,因此 textView.contentSize.height 为零。但是,如果我在 中设置它viewDidAppear,虽然它可以工作,但这些线条会在文本之后出现片刻。

这样做的正确方法是什么?

4

3 回答 3

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];
}
于 2011-05-31T15:48:30.317 回答
1

您应该在-viewDidLoad...中初始化所有视图。确实,在-viewDidLoad调用之前,您的视图还没有完全加载。

如果您需要在控制器之间传递数据,您可以在其中一个控制器中定义一个属性并设置其值。另一个控制器会在需要时读取该属性。

具体来说,在 -viewDidLoad您可以使用存储在属性中的值来初始化您的 UI 项。

于 2011-05-31T16:03:04.237 回答
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: 方法中设置滚动视图。

于 2011-05-31T16:04:29.910 回答