32

1 つのストーリーボードにビューが多すぎるため、実行が非常に遅くなります。この問題の解決策は、1 つのストーリーボードを複数のストーリーボードに分割することだと言われました。ボタンを使用して、ストーリーボード 1 のビューからストーリーボード 2 のビューに切り替える方法を教えてください。

4

9 に答える 9

35

Xcode 7 では、ストーリーボード参照を選択できます

ここに画像の説明を入力

宛先のストーリーボードとコントローラーを設定します

ここに画像の説明を入力

于 2015-10-20T20:42:37.883 に答える
27

別のストーリーボードへの参照の追加 - Apple 開発者ドキュメント

ここに画像の説明を入力

ここに画像の説明を入力

于 2015-12-07T09:23:51.790 に答える
27

Swift (iOS 8.1) では、これはとても簡単です:

  var storyboard: UIStoryboard = UIStoryboard(name: "Another", bundle: nil)
  var vc = storyboard.instantiateViewControllerWithIdentifier("NextViewController") as AnotherViewController
  self.showViewController(vc, sender: self)

Swift 3 の更新:

let storyboard: UIStoryboard = UIStoryboard(name: "Another", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "NextViewController") as! AnotherViewController
self.show(vc, sender: self)
于 2014-12-03T07:31:24.817 に答える
9

セグエ(iOS SDK 6.0 以降)を使用した別のソリューションでは、コードを目的ごとに分離し、カスタマイズの余地を残しています。

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    //check/validate/abort segue
    return YES;
}//optional

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    //sender - segue/destination related preparations/data transfer
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *destination = [[UIStoryboard storyboardWithName:@"SomeStoryboard" bundle:nil] instantiateInitialViewController];

    UIStoryboardSegue *segue = [UIStoryboardSegue segueWithIdentifier:@"identifier" source:self destination:destination performHandler:^(void) {
        //view transition/animation
        [self.navigationController pushViewController:destination animated:YES];
    }];

    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    [self shouldPerformSegueWithIdentifier:segue.identifier sender:cell];//optional
    [self prepareForSegue:segue sender:cell];

    [segue perform];
}

注: デフォルトの応答動作を維持するためにUITableViewCell *cell使用されます。sender TableViewController

于 2014-01-25T13:14:36.050 に答える
6

読んだことはすべて試しましたが、まだ成功しませんでした。Rob Browns Storyboard Linkを使用してなんとか機能させることが できました 実装は簡単で、非常に高速に動作します

于 2013-09-21T14:14:34.947 に答える
3

まず第一に、ストーリーボードを複数の個別のものに分割することは素晴らしいアイデアであり、多くの頭痛の種を軽減します (特に、チームに所属していて、ストーリーボード ファイルで多数のマージ競合を処理している場合)。

あなたの質問に答えるために-2つのストーリーボード間でセグエを必ずしも実行することはできませんが、私が大成功を収めた1つの解決策は、次のようなことです:

- (IBAction)buttonPressed:(id)sender {

    UIViewController *otherVC = [[UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil] instantiateInitialViewController]; //Or get a VC by its identifier

    [self.navigationController pushViewController:otherVC animated:YES];
}

他のストーリーボードをロードして、呼び出すinstantiateInitialViewControllerinstantiateViewControllerWithIdentifier:、必要なトランジションを実行するだけです。

お役に立てれば。

于 2013-09-13T03:24:55.210 に答える
2

簡単な Swift ソリューションを次に示します。

    let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ViewController") as UIViewController
    // .instantiatViewControllerWithIdentifier() returns AnyObject! this must be downcast to utilize it

    self.presentViewController(viewController, animated: false, completion: nil)
于 2015-07-06T07:00:48.053 に答える