Подкласс UIViewController показывает черный экран - PullRequest
3 голосов
/ 01 марта 2012

Я создал подкласс UIViewController в своем проекте и связал его с представлением, которое модально выдвигается «RootViewController».Я не внес никаких изменений в производный класс, но при нажатии «SecondView» он каждый раз становится черным.Если я связываю это представление со стандартным классом UIViewController, все работает нормально?

Поскольку "SecondViewController" является производным от UIViewController, я могу только догадываться, что проблема связана с функцией alloc / init, но я понятия не имею, с чего начать.

Я могу предоставитьПример кода, который я сейчас имею перед собой, если необходимо.

Это производный подкласс:

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self; }

- (void)loadView {}

- (void)viewDidLoad {
    [super viewDidLoad]; }

- (void)viewDidUnload {
    [super viewDidUnload];}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait); }

@end

Заголовок:

#import <UIKit/UIKit.h>

@interface SecondViewController : UIViewController

@end

Ответы [ 4 ]

2 голосов
/ 12 марта 2012

Измените это:

- (void)loadView
{
    // If you create your views manually, you MUST override this method and use it to create your views.
    // If you use Interface Builder to create your views, then you must NOT override this method.
}

На это:

- (void)loadView
{
    [super loadView];
    // If you create your views manually, you MUST override this method and use it to create your views.
    // If you use Interface Builder to create your views, then you must NOT override this method.
}

И это будет работать.

2 голосов
/ 05 марта 2012
- (void)loadView
{
    // If you create your views manually, you MUST override this method and use it to create your views.
    // If you use Interface Builder to create your views, then you must NOT override this method.
}

К вашему сведению, комментарий также генерируется автоматически.

1 голос
/ 04 февраля 2013

Попробуйте это

-(void)loadView
{
    UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; 

    [view setBackgroundColor:[UIColor whiteColor]];

    UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(10, 50, 100, 100)];

    [label setText:@"HAI"];

    [view addSubview:label];

    self.view = view; 
}
0 голосов
/ 04 апреля 2013

Если вы пытаетесь загрузить представление до того, как оно «обнаружится» во время перехода от IB, вы можете попробовать что-то подобное в контроллере представления назначения.

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.view layoutIfNeeded];
}
...