2011-11-17 42 views
1

我嘗試在故事板上調用主要的ViewController。在我的應用程序中,還有一個額外的.h,.m文件,沒有xib或storyboard。UiButton/IBAction - 從RootView到故事板中的mainView的鏈接

在這個.m文件牛逼craeted一個按鈕:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self action:@selector(home:)forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Show View" forState:UIControlStateNormal]; 
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 
[self.view addSubview:button]; 
NSLog(@"Home-Button line 645"); 

這個按鈕應該鏈接到我的故事板主視圖控制器。該視圖具有標識符HauptMenu。我沒有錯誤,但視圖不會改變到我的主ViewController。哪裏不對?

- (IBAction)home:(id)sender { 
    NSLog(@"Button was tapped"); 
    ViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"HauptMenu"]; 

    NSLog(@"1"); 
    [viewController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; 
    NSLog(@"2"); 
    [self.navigationController pushViewController:viewController animated:NO]; 
    [viewController release]; 
    NSLog(@"3"); 

} 

回答

1

如果.m文件不與任何故事板相關,不會self.storyboardNil

嘗試:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName: 
           @"MainStoryboard" bundle:[NSBundle mainBundle]]; 
ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HauptMenu"]; 

確保將storyboardWithName:改變無論你的故事板而得名。


因爲Objective-C的比其他語言處理無不同,您可能不會得到任何錯誤,它(通常)不會,如果你試圖對nil調用的方法拋出一個異常,它只會返回nil 。下面的代碼會很樂意跑,投擲沒有編譯或運行時錯誤:

UIViewController * test = nil; 
[test viewDidLoad]; 

NSString * storyBoardName; 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    storyBoardName = @"MainStoryboard_iPad"; 
} else { 
    storyBoardName = @"MainStoryboard_iPhone"; 
} 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName: 
            storyBoardName bundle:[NSBundle mainBundle]]; 
ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HauptMenu"]; 
+0

謝謝!!!!!我擁有它! – webschnecke

+0

但有一個問題更多;-)我使用MainStoryboard_iphone和MainStoryboard_ipad。我只想使用一個.h和.m文件。這是可以改變的,或者我該怎麼做? – webschnecke

+0

查看我的編輯 – Kevin

0

我有這個問題我自己。現在感謝這個答案,它的工作原理!

這裏是我的代碼,希望其他人可以使用此:

// Declare the storyboard 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]]; 

// Declare the next view controller 
NextViewController *nextViewController = [storyboard instantiateViewControllerWithIdentifier:@"NextViewController"]; 

// Pass value 
nextViewController.result = result; 
[currentObject memberfunction:value]; 

// Define transition 
nextViewController.modalTransitionStyle=UIModalTransitionStyleCoverVertical; 

// Perform change 
[self presentModalViewController:nextViewController animated:YES];