7

私はiOSとストーリーボードを初めて使用するので、新しいアプリのアーキテクチャを設計するための可能な方法についてアドバイスが必要です。データベースにいくつかのデータを保存し、いくつかのカテゴリの名前を持ついくつかのボタンだけを含むUIViewControllerページを作成します。「すべて」がクリックされた、または「ビジネス」がクリックされたとしましょう。それは、そのカテゴリに従って表示されたデータをUITableViewControllerにフェッチします。

今、私は一部で混乱しています:

  1. ストーリーボードでは、異なるボタンから同じViewControllerクラスに複数のセグエを作成できますか?それが許可されていない場合、6つのカテゴリのセグエを作成するために6つの異なるUITableViewControllerクラスを作成する必要がありますか?

  2. また、複数のボタンから単一のUIViewControllerにセグエを作成できる場合、ストーリーボードでパラメーターを送信して、特定のボタンをクリックしてUIViewControllerに移動したことを認識させるにはどうすればよいですか。

UITableViewControllerでパラメーターを受け取るカスタムコンストラクターを作成する必要があります。そのコンストラクターを他のボタンクリックメソッドから初期化しますか?カテゴリ別に結果を表示するには?または、ストーリーボードでこれをより簡単に行う方法はありますか?

4

2 に答える 2

9
  1. 確かに、あなたはそれを行うことができます。

  2. すべてのボタンを作成したら、controlキーを押しながら各ボタンから次のView Controllerにドラッグし、(たとえば)「プッシュ」セグエを作成します。次に、セグエのグラフィックをクリックしてセグエを選択します。属性インスペクターに切り替えて、segueに「All」や「Business」などの識別子を付けます。メソッド内のセグエの識別子を調べて、-prepareForSegue:どのセグエが遷移を引き起こしたか、したがってどのカテゴリを表示するかを判断できます。

ただし、そのアプローチはお勧めしません。すべてがまったく同じことを行う半ダースのセグエを作成する必要はありません。代わりに、単一のセグエをトリガーするアクションを使用します。

  • 各ボタンのプロパティを一意の値に設定してtag、ボタンを区別できるようにします。

  • のような名前のアクションメソッドを最初のViewController(ボタンを管理するもの)に追加します-(IBAction)switchToCategoryFromButton:(id)sender

  • すべてのボタンをその単一のアクションに接続します。

  • sender.tagどのボタンが押されたかを確認し、それを使用してロードするカテゴリを決定し、プログラムで次のビューコントローラへの1つのセグエをトリガーするようにアクションを実装します。

アクションによってトリガーされる単一のセグエを持つことは、多くのセグエよりもはるかにきれいに思えます。これを行うためのコードは次のようになります。

- (IBAction)switchToCategory:(UIControl*)sender
{
    // map the tapped button to a category
    switch (sender.tag) {
        case kAllButton: {
            self.category = kAllCategories;
            break;
        }
        case kBusinessButton: {
            self.category = kBusinessCategory;
            break;
        }
        default: {
            self.category = kAllCategories;
            break;
        }
    }

    // start the segue
    [self performSegueWithIdentifier:kCategorySegue sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // tell the destination view controller what category to display
    if ([segue.identifier isEqualToString:kCategorySegue]) {
        [(NextViewController*)segue.destinationViewController setCategory:self.category];
    }
}
于 2012-09-04T06:24:23.343 に答える
2


イベントの下でself.performSegueWithIdentifier( "yourViewSegue"、sender:sender)を使用して、ボタンのクリックを次のように処理します。

   @IBAction func redButtonClicked(sender: AnyObject) {
        self.performSegueWithIdentifier("redView", sender: sender)
    }

redViewはセグエ識別子です。

ボタンのイベント処理に同じ機能を使用でき、異なるタグを割り当てることでボタンのタッチを区別できます。

于 2016-07-23T22:02:07.697 に答える