2012-09-04 12 views
6

私はiOSとストーリーボードの新機能です。新しいアプリのアーキテクチャを設計する方法についてアドバイスが必要です。私はいくつかのデータをデータベースに保存し、いくつかのカテゴリのいくつかの名前を持つちょうどいくつかのボタンを持つUIViewControllerページを持っています。 'All'をクリックするか、 'Business'をクリックすると、そのカテゴリに応じたデータをUITableViewControllerにフェッチします。複数のボタンをすべて同じView Controllerに分割する方法は?

今私は一部に混乱しています:ストーリーボードで

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

  2. 複数のボタンから単一のUIViewControllerにセグをすることが許可されている場合、特定のボタンをクリックしてUIViewControllerに行くことを実現するために、ストーリーボードにパラメータを送信するにはどうすればいいですか?

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

答えて

8
  1. 確かにそうすることができます。

  2. すべてのボタンを作成した後、各ボタンから次のビューコントローラーにドラッグし、「プッシュ」セグを作成します。次に、セグのグラフィックをクリックしてセグを選択します。 「属性」インスペクタに切り替え、「すべて」や「ビジネス」などの識別子をsegueに指定します。あなたの-prepareForSegue:メソッドでsegueの識別子を調べて、どのsegueが遷移を引き起こしたか、したがってどのカテゴリを表示するかを知ることができます。

私はこのアプローチを推奨しません。すべて同じことをする半ダースのセグを作る必要はありません。あなたは、ボタンを区別できるように、ユニークな値に各ボタンのtagプロパティを設定し

  • :私の代わりに、単一のセグエをトリガーするアクションを使用すると思います。

  • -(IBAction)switchToCategoryFromButton:(id)senderという名前の最初のビューコントローラ(ボタンを管理するコントローラ)にアクションメソッドを追加します。

  • すべてのボタンをその単一の操作に接続します。

  • は、それが押されたボタンを把握するsender.tagに見えるように、アクションを実装ロードするカテゴリを決定するためにそれを使用し、その後、プログラム次ビューコントローラへセグエをトリガします。

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

- (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]; 
    } 
} 
+2

+1複数のセグを作成しない場合 – Madivad

1

使用
self.performSegueWithIdentifier( "yourViewSegue"、送信者:送信者を)あなたのイベントの下のようにボタンのクリックを処理するために:

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

redViewは、segue識別子です。

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

関連する問題