3

我正在为 iPhone 应用程序的接口工作。我认识到我在不同的视图中有重复的对象,所以我想创建一个父 ViewController。但是现在当我想从子 ViewController 访问这个父 ViewController 的属性时,我遇到了一些问题。具体来说,我希望在每个视图中都有一个通用的 ProgressView,但我希望在视图出现时将其隐藏。当我从子 ViewController 访问 ProgressView.hidden 以获取显示的 ProgressView 时,我没有收到任何错误消息,但在运行程序中没有任何反应。

我的代码如下所示:

父视图控制器.h:

#import <UIKit/UIKit.h>

@interface ParentViewController : UIViewController{
    UIProgressView *progressView;
}

@property (readwrite) UIProgressView *progressView;

@end

父视图控制器.m:

- (void)viewDidLoad
{

    CGRect progressViewFrame = CGRectMake(0, 407, 320, 9);
    progressView = [[UIProgressView alloc] initWithFrame:progressViewFrame];
    progressView.hidden = TRUE;
    [self.view addSubview:progressView];

    [super viewDidLoad];
}

ChildViewController.h:

#import <UIKit/UIKit.h>
#import "ToolbarViewController.h"

@interface ChildViewController : ParentViewController

@end

ChildViewController.m:

- (void)viewDidLoad
{   
    progressView.hidden = FALSE;

    [super viewDidLoad];
}

如果我这样做,ProgressView Bar 将保持隐藏状态,我不会收到任何错误。我还检查了是否调用了 viewDidLoad 方法,是的,它被调用了。

问候 C4rmel

4

2 回答 2

4

在调用progressView.hidden = FALSE;之前调用[super viewDidLoad];时,progressView尚未初始化;它仍然是nil,因此分配无效。

于 2012-07-08T16:59:53.210 回答
3

ChildViewController.m中,函数调用顺序不正确。通过以下方式更改它:

- (void)viewDidLoad
{   
    [super viewDidLoad];
    progressView.hidden = FALSE;    
}

这里调用 super 将创建 progressView。然后你可以隐藏它。否则,您将隐藏一个甚至没有创建的视图。

于 2012-07-08T16:59:36.790 回答