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

Iphone 在哪里可以加载需要知道Ivar内容的视图?,iphone,cocoa-touch,uiscrollview,uitextview,viewwillappear,Iphone,Cocoa Touch,Uiscrollview,Uitextview,Viewwillappear,我使用UIScrollView在UITextView后面创建有线条的纸的幻觉(我必须使用单独的UIScrollView,以便有边距)。为了使用正确的行数绘制图纸,我需要传递UITextView的contentSize.height 以下是目前发生的情况: 用户从父视图控制器中的表中选择注释 父视图控制器设置textview.text属性,以便我的UITextView知道要显示的文本 如果我在视图中设置UIScrollView,则它将出现,因为尚未设置textView.text,因此textVie

我使用UIScrollView在UITextView后面创建有线条的纸的幻觉(我必须使用单独的UIScrollView,以便有边距)。为了使用正确的行数绘制图纸,我需要传递UITextView的
contentSize.height

以下是目前发生的情况:

  • 用户从父视图控制器中的表中选择注释
  • 父视图控制器设置textview.text属性,以便我的UITextView知道要显示的文本
  • 如果我在
    视图中设置UIScrollView,则它将出现
    ,因为尚未设置textView.text,因此textView.contentSize.height为零,因此它将不起作用。但是如果我在
    视图中设置它,它就会出现
    ,虽然它可以工作,但行会在文本之后出现


    正确的方法是什么?

    只需在按下子视图控制器之前设置属性即可

    我假设您的代码类似于父视图控制器中的代码:

    - (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];
    }
    

    只需在按下子视图控制器之前尝试设置属性

    我假设您的代码类似于父视图控制器中的代码:

    - (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项。

    您应该在
    -viewDidLoad
    中初始化所有视图。。。 实际上,在调用
    -viewDidLoad
    之前,您的视图尚未完全加载

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


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

    您需要的是子视图控制器上的一个简单的
    NSString*noteText
    ivar,并将其设置为类似
    @property(非原子,复制)NSString*noteText
    的属性,然后对其进行合成。然后,按照gcamp的建议,执行以下操作:

    YourChildController *childVC = ...
    child.noteText = @"your selected note text here";
    [self.navigationController pushViewController:childVC animated:YES];
    [childVC release];
    
    然后在您的ChildController视图中加载:

    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
    

    如果这不起作用,您可以尝试在视图中设置scrollview将显示:方法。

    您需要的是子视图控制器上的一个简单的
    NSString*noteText
    ivar,并将其设置为类似
    @属性(非原子,复制)的属性NSString*noteText
    ,然后将其合成。然后,按照gcamp的建议,执行以下操作:

    YourChildController *childVC = ...
    child.noteText = @"your selected note text here";
    [self.navigationController pushViewController:childVC animated:YES];
    [childVC release];
    
    然后在您的ChildController视图中加载:

    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
    

    如果这不起作用,您可以尝试在您的视图中设置scrollview将显示:方法。

    这是我尝试的第一件事,但如果这样做,文本将变成空白!也许我应该尝试设置一个单独的文本属性,然后只指定实际的textview。ViewView中的文本将显示。。。稍后返回…可能是调用
    UITextView
    时未加载视图。您可以尝试覆盖textView的getter,并检查该视图是否加载了
    isViewLoaded
    。如果没有加载,只需执行即可!只是尝试使用不同的属性。。。在将子视图控制器推到堆栈上之前,我似乎无法设置属性。这怎么可能?如果已加载视图,则将设置出口。也许如果你给我看更多的代码:你是手动放置textView还是使用IB?我的错误-我在子视图控制器中设置了一个属性,但没有从父视图控制器设置它。现在可以了。因此,我可以在按下视图控制器之前设置自己的属性,但不能将子视图的参数设置为属性。很高兴知道:)这是我尝试的第一件事,但如果这样做,文本就会变成空白!也许我应该尝试设置一个单独的文本属性,然后只指定实际的textview。ViewView中的文本将显示。。。稍后返回…可能是调用
    UITextView
    时未加载视图。您可以尝试覆盖textView的getter,并检查该视图是否加载了
    isViewLoaded
    。如果没有加载,只需执行即可!只是尝试使用不同的属性。。。在将子视图控制器推到堆栈上之前,我似乎无法设置属性。这怎么可能?如果已加载视图,则将设置出口。也许如果你给我看更多的代码:你是手动放置textView还是使用IB?我的错误-我在子视图控制器中设置了一个属性,但没有从父视图控制器设置它。现在可以了。因此,我可以在按下视图控制器之前设置自己的属性,但不能将子视图的参数设置为属性。很高兴知道:)