[英]Call storyboard scene programmatically (without needing segue)?
我有一個模態故事板場景,我希望所有其他場景都可以訪問。 從我的故事板上的每個場景創建一個模態segue會產生一大堆亂七八糟的字符串。 有沒有辦法讓我離開segues並以編程方式調用場景?
基本上我想做這樣的事情:
MyNewViewController *myNewVC = [[MyNewViewController alloc] init];
[self presentModalViewController:myNewVC animated:YES];
除了創建和推送視圖控制器類,我想做一個模態轉換到“隔離”(不與segue連接)故事板場景。
是的你可以。 做這樣的事情來訪問VC,然后只是模態推送它:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
MyNewViewController *myVC = (MyNewViewController *)[storyboard instantiateViewControllerWithIdentifier:@"myViewCont"];
注意:方法presentModalViewController:animated在iOS 6中已棄用。
新代碼應為:
NSString * storyboardName = @"MainStoryboard_iPhone";
NSString * viewControllerID = @"ViewID";
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
MyViewController * controller = (MyViewController *)[storyboard instantiateViewControllerWithIdentifier:viewControllerID];
[self presentViewController:controller animated:YES completion:nil];
在故事板中為視圖控制器提供一個標識符(在Attributes Inspector下),然后使用以下代碼將該視圖轉發。
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"STORYBOARDNAME" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"VIEWCONTROLLERIDENTIFIER"];
[self presentModalViewController:vc animated:YES];
我有一個案例,我想從應用程序的主要部分呈現視圖控制器,一個具有設置和幫助等。 要做到這一點,我希望它在一個導航控制器中,我們可以從UIBarButtonItem調用一個小插件模塊。
現在,這可以在當前的故事板中,或者在另一個故事板中,也沒關系。
我想這樣做,因為我厭惡我的故事板上的segue line spaghetti的潛力。
這是怎么做的。
- (IBAction)displaySettings:(id)sender
{
LOG_SELECTOR() // google that for extra goodness
// FYI, this can be done using a different storyboard like so.
/*
NSString * storyboardName = @"MainStoryboard_iPhone"; // possibly use device idiom?
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
*/
// To push a new set of scenes with a new Navigation Controller, it is done like this:
UINavigationController *settingsNC = [self.storyboard instantiateViewControllerWithIdentifier:@"Settings Nav Controller"];
OBSettingsUIViewController *settingsVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Settings root"];
[settingsNC pushViewController:settingsVC animated:NO];
[settingsNC setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
// Present the view controller;
[self presentViewController:settingsNC animated:YES completion:NULL];
}
在呈現的視圖控制器中(或在導航控制器的子類中),您可以使用UIBarButtonItem來關閉整個呈現的視圖控制器層次結構,如下所示:
- (IBAction)dismissThisVC:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
希望這可以幫助一群人。 干杯。
打電話導航到其他課程
UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UINavigationController *navController = (UINavigationController *)window.rootViewController;
DumpFeed *dump = [storyboard instantiateViewControllerWithIdentifier:@"DumpFeed"];
dump.isPushed=YES;
dump.strUserId = appDelegate.strFriendid;
[navController pushViewController:dump animated:YES];
我認為通過iOS7,通過故事板實現它變得非常容易
我目前正在學習iOS7中的新功能並找到了這個簡單的解決方案,但即使在以前的版本中它也可能是相關的,我不確定。
首先,您需要將呈現VC與目標VC連接(這是唯一需要的連接),然后在故事板的屬性檢查器中選擇要模態的樣式,在身份檢查器中為VC提供storyboardID並確保檢查'使用storyboardID'復選框,
如果還沒有將此方法添加到您的presentationVC:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
YourTargetVC * targetVC =
(YourTargetVC *)segue.destinationViewController;
if(nil != targetVC) {
//Do preparations here
}
}
現在,當您希望從presentationVC展示您的targetVC時,您可以使用:
[self performSegueWithIdentifier:(NSString *) sender:(id)];
其中標識符是viewController的storyboardID,發送方是觸發操作的視圖,此方法將調用storyboard場景,因此將調用[prepareForSegue: sender:]
方法,允許您在targetViewController出現之前進行最后修改。
Heres Swift 3版本:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "baseViewController")
self.present(viewController, animated: true, completion: nil)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.