我在哪里可以加载需要知道Ivar内容的视图?

时间:2011-05-31 15:41:44

标签: iphone cocoa-touch uiscrollview uitextview viewwillappear

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

以下是目前发生的事情:

  1. 用户从父视图控制器中的表中选择一个注释。
  2. 父视图控制器设置textview.text属性,以便我的UITextView知道要显示的文本。
  3. 如果我在viewWillAppear中设置了我的UIScrollView,它将无法正常工作,因为尚未设置textView.text,因此textView.contentSize.height为零。但是,如果我在viewDidAppear中进行设置,虽然它有效,但这些行会在文本后面显示。

    解决这个问题的正确方法是什么?

3 个答案:

答案 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:方法中设置您的滚动视图。