2015-07-16 2 views
4

Я разрабатываю простой проект браузера на mac, я не использовал диспетчер представлений по умолчанию.OS X как назначить startup viewcontroller

Вместо этого я пишу класс viewcontroller BrowserViewController. и писать следуют в AppDelegate

@interface AppDelegate() 
@property (nonatomic, strong) BrowserViewController *browserController; 
@end 

@implementation AppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // Insert code here to initialize your application 
    self.browserController = [[BrowserViewController alloc] init]; 

    [self.window makeKeyWindow]; 
    [self.window setContentView:self.browserController.view]; 
} 

@end 

Но когда приложение запускается это приведет к ViewController по умолчанию не BrowserViewController. Я действительно не знаю причины.

Спасибо за помощь, я решил эту проблему. Мое решение так:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
//set the frame of the window fit to the device's frame 
// 
self.window = [[NSWindow alloc] initWithContentRect:[[NSScreen  mainScreen] frame] styleMask:NSBorderlessWindowMask  backing:NSBackingStoreBuffered defer:NO ]; 

// 
// 
self.browserController = [[BrowserViewController alloc] init]; 


//set contentView 
// 
self.window.contentViewController = self.browserController; 

//this is setting global backgroundColor of the window 
// 
self.window.backgroundColor = [NSColor whiteColor]; 

//this means the window is the window that will receive user interaction. 
// 
[self.window makeKeyAndOrderFront:self]; 
//[self.window makeKeyWindow];//NOTE: This is not working. 
} 
+1

Вы должны пометить язык, это упростит поиск вашего вопроса, а также изменит подсветку синтаксиса кода. – crashmstr

ответ

2

Вы можете выбрать Is Initial Controller в раскадровке.

storyboard

+0

спасибо за ответ, он действительно позволяет приложению сначала не привести к стандартным диспетчерам просмотров. но мой BrowserViewcontroller не показывался. и затем я заменил [self.window makeKeyWindow]; to [self.window makeKeyAndOrderFront: self]; , показал BrowserViewController. Я прочитал документ, - (void) makeKeyAndOrderFront: (id) sender Описание \t Перемещает окно в начало списка экрана на своем уровне и делает его ключевым окном; то есть он показывает окно. но - (void) makeKeyWindow только делает окно ключевым окном. – melody5417

+0

Спасибо за помощь, я просто знаю, что я должен щелкнуть по чеку, чтобы отметить принятый ответ. – melody5417

0

Похоже, что вы ищете (внутри вашего didFinishLaunchingWithOptions метода):

self.browserController = [[BrowserViewController alloc] init]; 
[self.window setRootViewController: self.browserController]; 
[self.window makeKeyAndVisible]; 
+0

Спасибо за ответ ~~ Мое приложение предназначено для os x, и я не могу найти метод setRootViewController, я думаю, что это просто для IOS. – melody5417

0

Если вы хотите программно:

Примечания

Это для прошивки, но логика идентичны. Надеюсь, что это будет полезно по какой-то причине .. :)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //set the frame of the window fit to the device's frame 
    // 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    //what you have above is correct 
    // 
    self.browserController = [[BrowserViewController alloc] init]; 

    //you can also directly set it like 
    // 
    BrowserViewController *mainView = [[BrowserViewController alloc] init]; 

    //this is the most important, you need to set the window's rootViewController 
    // 
    self.window.rootViewController = mainView; 

    //this is setting global backgroundColor of the window 
    // 
    self.window.backgroundColor = [UIColor whiteColor]; 

    //this means the window is the window that will receive user interaction. 
    // 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

Надеюсь, это полезно и информативно. :)

+0

Спасибо за помощь. Ваше решение для IOS, и мое приложение предназначено для os x. Метод setRootViewController не подходит для OS X. Но я решил проблему точно так же, как и ваши шаги, и я обнаружил, что ключевой проблемой является замена метода makeKeyWindow методом makeKeyAndOrderFront:. Спасибо ~~~ – melody5417

+0

@ melody5417, Извините за это, я заметил, что выделено одно. хмм. но логика программирования ios и os x подобна идентичной .. и вы можете. :) – 0yeoj

Смежные вопросы