1

私はこの問題で完全に迷っています。私はストーリーボードで作業しており、テーブルビューなどを備えたナビゲーションコントローラーを作成しました。Servicesテーブルビューの各行にあり、サービスごとに 1 つの詳細ビューを作成する必要があります。

サービスが多すぎて絵コンテに作りきれない。アイデアは、Web サービスServices(パラメータの数、それぞれのタイプなど) から をダウンロードし、必要に応じてテキストフィールド/ボタンとして に追加することServiceです。

だから、私の問題と質問は次のとおりです。

1) ストーリーボードとビューをプログラムで組み合わせることができますか? NewViewinを作成する場合MyTableviewClassprepareforsegueメソッド内で作成する必要がありますか? ナビゲーション コントローラーを失うことなく画面に表示するにはどうすればよいですか? これは私が持っているものです(機能しません:「Service1」という名前のセグエはないと私に言います):

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

if ([[segue identifier] isEqualToString:@"NextLevel"]) {
    [segue.destinationViewController setActualNodo:[actualNodo getSonAtIndex:indexPath.row]];
} else if ([[segue identifier] isEqualToString:@"Service1"]) {
    CGRect bounds = self.view.bounds;
    UIView *myview  = [[UIView alloc] initWithFrame:bounds];
    [myview setBackgroundColor: [UIColor redColor]];
    [self.view addSubview:myview];
    [self.view bringSubviewToFront:myview]; }

どんな本や参考文献も歓迎しますが、私は似たようなものを見つけることができませんでした. これはiOSでは非常に複雑ですか?私はJavaで同様のことをしました。XIB を使用してインターフェイスを動的に生成することについて読んだことがありますが、それが何であるかはわかりません..ありがとうございます。

4

3 に答える 3

2

Flea の回答に加えて、ナビゲーション コントローラーを保持する必要がある場合は、テーブル ビュー コントローラーのファイル所有者アイコン (View Controller のビューの下にある黄色のボックス) から ServiceViewController にコントロールをドラッグして、ストーリーボードにプッシュ セグエを作成するだけです。ストーリーボードに追加すると、セグエのタイプとして「プッシュ」を選択できるポップアップ ウィンドウが表示されます。次に、セグエを選択し、属性インスペクター (スナップショットのボタンの横にある 4 番目のボタン) で、「識別子」テキスト フィールドに、セグエの一意の識別子 ( など) を入力しserviceSegueます。

この時点で、Flea のコードを使用すると、次のようになります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     [self performSegueWithIdentifier:@"serviceSegue" sender:nil];
}

そして、あなたが投稿したコードで:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

    if ([[segue identifier] isEqualToString:@"serviceSegue"]) 
        [segue.destinationViewController setActualNodo:[actualNodo getSonAtIndex:indexPath.row]];
}

他のセグエ「Service1」で何をしようとしているのかわかりませんが、TableViewController のビューを変更したい場合、セグエはそれを行う方法ではありません。didSelectRowAtIndexPath選択した行に応じて、メソッドでそれを行う必要がある場合 :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     if (You want to transition to other view controller)
         [self performSegueWithIdentifier:@"serviceSegue" sender:nil];
     else
         Change your view here.
}

これが役立つことを願っています!

于 2013-05-10T15:55:02.183 に答える
2

はい、ビューを使用して を作成し、StoryBoardプログラムでビューを追加できます。

メソッド内でビューを作成しようとしないでくださいprepareForSegue。これは、オブジェクトを別の に渡すために実際に使用する必要がありますViewController

私はあなたにこれを提案します。に戻りStoryBoard、新しい UIViewController シーンを作成します。最初のシーンをクリックしてCTRL、新しいシーンにドラッグします。次に、セグエをクリックして名前を付けます。

ステップ1:

ServicesViewControllerという名前の新しいクラスを作成し、それが `UIViewController のサブクラスであることを確認します。

**ここに画像の説明を入力**

ステップ2:

に戻りStoryBoard、シーンをクリックして選択します。次に をクリックし、Files Owner最後にクラス情報ボタン (3 番目のボタン) をクリックして、ServiceViewController作成したばかりのクラスを選択します。

ここに画像の説明を入力

ステップ 3:

ServicesViewControllerメソッドに戻り、didSelectRowAtIndexseque を呼び出します。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"YOUR_SEGUE_NAME" sender:nil];
}

とりあえず、メソッド内のすべてのコードを削除して、prepareForSegue最初にトランジションを取得します。

于 2013-05-09T19:47:25.157 に答える