2017-02-11 11 views
0

私はInstagramのようなソーシャルメディアアプリに似ています。このセルには、UIImageViewと別のView Controllerにつながるボタンがあります。別のビューコントローラで必要なのは、どのセルがタップされたかによって変わるUILabelのデータベースから読み込まれたテキストです。これについて最善の方法は何でしょうか?UITableViewセルから別のビューコントローラにFirebaseデータをコピー

私のコメントの1つからさらに詳しい情報: Firebaseでは、私はすべての私の記事を保持する 'posts'という名前のサブセクションを持っています。それらの投稿は、別個のビューコントローラへのセグを有する「詳細」ボタンを有するセルのメインページに表示される。私がしたいことは、別個のView Controllerで特定の投稿を呼び出し、その投稿のデータをUI Labelに表示することです。画像:m.imgur.com/c7fEKks?r.png

+0

かなり漠然とした質問を表示するが、2つの即時のソリューションがあります。 1)最初のデータソース(配列)にデータを格納するときに、必要なデータが含まれていて、別のView Controllerにセグエングしたときに、セグを介して '余分な'データが渡されます。 2)別のView Controllerに移行するとき、Firebaseからデータをロードしてコントローラに表示します。この問題を解決するには約50の方法がありますが、特定のユースケースデータ、Firebaseの構造とコードはありません。ちょっと推測です。 – Jay

+0

@jay Firebaseでは、私はすべての自分の投稿を保持する 'posts'という名前のサブセクションを持っています。それらの投稿は、別個のビューコントローラへのセグを有する「詳細」ボタンを有するセルのメインページに表示される。私がしたいことは、別個のView Controllerで特定の投稿を呼び出し、その投稿のデータをUI Labelに表示することです。画像:http://m.imgur.com/c7fEKks?r.png – gabe

+0

理解しています。私のコメントの両方の提案は解決策になるでしょう。 – Jay

答えて

0

セグを通したデータの受け渡し方法については、多数のチュートリアルが用意されていますので、これはすばやく簡単なスニペットです。

は、ユーザ名を表示のtableViewと以下

A MasterViewControllerと仮定する。 tableViewには、UserClassオブジェクトが格納された配列dataSourceがあります。これらのオブジェクトはFirebaseから読み込まれます。

UserClass { 
    userName = "" 
    shoeSize = "" 
} 

詳細ラベルの付いたDetailViewController。

AセグエはのtableViewの行をタップした時に「アクティブ」を、ユーザーの表示されます。このセグエDetailViewController

にMasterViewController上のtableView上の行に関連付けられています親切詳細の表示の「showDetailを」と呼ばれますdetailViewControllerの靴のサイズ

ここに、masterViewController tableViewの行がタップされたときに呼び出されるコード(MasterViewController内)があります。変数が移入されたときにdetailViewControllerで

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "showDetail" {   
    if let indexPath = self.tableView.indexPathForSelectedRow { 
     let aUser = usersArray[indexPath.row] 
     let shoeSize = aUser.shoeSize 
     let controller = (segue.destination as! 
       UINavigationController).topViewController as! DetailViewController 
     controller.shoeSize = shoeSize 
    } 
    } 
} 

は、それが

@IBOutlet weak var shoeSizeLabel: UILabel! 

func configureView() { 
    if let shoe = self.shoeSize { 
     if let label = self.shoeSizeLabel { 
      label.text = shoe 
     } 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.configureView() 
} 

var shoeSize: String? { 
    didSet { 
     self.configureView() 
    } 
} 
+0

'(segue.destination!! UINavigationController).topViewController as!DetailViewController)'は私に期待される式エラーを与えます。 – gabe

+0

@gabe次のようにしてパンを取り出してください! DetailViewController。また、フローを見たい場合は、XCodeで新しいプロジェクトを作成し、タイプとして「マスター詳細」を選択し、作成されたプロジェクトテンプレートにセグメントなどが表示されます。 – Jay

+0

さて、DetailViewConrollerを見ると、FireBaseデータではなく、UILabelしか表示されません。私のDetailViewController:http://pastebin.com/8g69sBW5、MainViewController:http://pastebin.com/jtpkBiWX – gabe

関連する問題