UIViewController子视图存在,但我看到黑屏

时间:2012-12-29 16:35:00

标签: ios uiviewcontroller

我有2个视图控制器,第一个是故事板(这是root),第二个是nibless。当我按下根视图控制器中的按钮时,它应该调用第二个控制器。

这是我的第二个视图控制器的代码:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        UILabel *sampleLabel = [[UILabel alloc] initWithFrame: CGRectMake(0,0,100,100)];
        UIImageView * basketItem = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"B.jpg"]];
        [self.view addSubview:sampleLabel];
        [self.view addSubview:basketItem];
        NSLog(@"%@",self.view.subviews);
        sampleLabel.text = @"Main Menu";
    }
    return self;
}

self.view.sebviews查询显示2个对象标签和imageView对象存在,但实际上我只看到黑屏。

这是转换方法

- (void)transitionToViewController:(UIViewController *)aViewController
  withOptions:(UIViewAnimationOptions)options
{
      aViewController.view.frame = self.containerView.bounds;
      [UIView transitionWithView:self.containerView
                  duration:0.65f
                   options:options
                animations:^{
                    [self.viewController.view removeFromSuperview];
                    [self.containerView addSubview:aViewController.view];
                }
                completion:^(BOOL finished){
                    self.viewController = aViewController;
                }];    
}

2 个答案:

答案 0 :(得分:2)

移动viewDidLoad中的代码。在这里,您确定视图已加载到内存中,因此可以进一步自定义。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UILabel *sampleLabel = [[UILabel alloc] initWithFrame: CGRectMake(0,100,100,100)];
    UIImageView * basketItem = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"B.jpg"]];
    [self.view addSubview:sampleLabel];
    [self.view addSubview:basketItem];
    NSLog(@"%@",self.view.subviews);
    sampleLabel.text = @"Main Menu";    
}

如果您不使用ARC,请注意内存泄漏。

注意

我真的建议您阅读Apple doc。你应该了解事情是如何运作的。希望有所帮助。

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html

修改

我不知道问题是什么。要使其有效,请尝试覆盖loadView(在MenuViewController)方法中,如下所示:

- (void)loadView
{
    CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
    UIView *contentView = [[UIView alloc] initWithFrame:applicationFrame];
    contentView.backgroundColor = [UIColor redColor]; // red color only for debug purposes
    self.view = contentView;
}

在我写的时候保留viewDidLoad方法,看看会发生什么。

创建视图控制器时,只使用init方法。

MenuViewController *vc = [[MenuViewController alloc] init];

答案 1 :(得分:1)

UILabel frame size.width=0CGRectMake(0,100,0,100)

B.jpg

如果UIImageView未添加到项目中,则您UIViewController也将为空。

此外,如果第二个- (id)init没有XIB,请使用- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil方法而不是{{1}}对其进行初始化。