2016-10-08 12 views
0

コンテナビューはビューコントローラ内にあります。ユーザがボタンを押すと、コンテナビューが表示されますが、コンテナビューのテキストはユーザがどのボタンを押したかに基づいています。これを行うには、コンテナビューを更新する必要がありますが、これを行う方法はわかりません。コンテナビューでのコンテンツの更新

これは私のコンテナビューのコードです:

override func viewDidLoad() { 
     super.viewDidLoad() 

     Cancel_Button.hidden = true 
     Save_Button.hidden = true 

     let Storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let ViewController: View = Storyboard.instantiateViewControllerWithIdentifier("View") as! View 
     Title_String = ViewController.String 
     Title_Label.text = Title_String 
    } 

そして、これは私のビューコントローラのコードです:

@IBOutlet var View_Controller_Popup: UIView! 
var String = String() 

override func viewDidLoad() { 
     super.viewDidLoad() 


     View_Controller_Popup.hidden = true 
    } 

@IBAction func Button_Pressed(sender: AnyObject) { 
     let Storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let ViewController: ContainerView = Storyboard.instantiateViewControllerWithIdentifier("Container") as! ContainerView 
     self.String = "Specific Title" 
     ViewController.Title_String = self.String 
     self.View_Controller_Popup.hidden = false 
    } 

ボタンが押されたときになるように、どのように私はコンテナビューをリロードしますコンテナビューは、押されたボタンに基づいてラベルテキストで表示されます。

更新:

一部の人々が問題を理解できないので、私は、私は、画像に問題があることを言い替えるます持っています。

これは私のビューです:あなたは(アイコン付き)多くのボタンがある見ることができるように

画像が

を削除されています。ユーザーがボタンを押すと、情報を表示するコンテナビューが表示されます。

したがって、各ボタンのラベルテキストは異なる必要があります。しかし、現在のところ、文字列は空白なので、ラベルテキストは空です。

私はコンテナビューのコードを更新していないため、文字列はまだ空です。

問題は、コンテナビューにタイトルラベルが正しく表示されていないことです。これはコンテナビューを更新しないためですが、コンテナビューの更新方法は実際にはわかりません。

+0

あなたはストーリーボードを使用している場合は、あなたが含まれているビューコントローラを設定することができます埋め込みセグを使用します。あなたの含まれているViewControllerでは、 'prepareForSegue'に含まれているビューコントローラへの参照を取得し、埋め込みセグを探します。プロパティに参照を格納すると、必要に応じていつでもその関数を呼び出すことができます。 – Paulw11

+0

私はストーリーボードを使用しています。コードでこれを行う方法を教えてください。 –

答えて

0

あなたが何を求めているのかは完全にはわかりませんが、私は答えようとします。私が誤解している場合は教えてください。

ここの鍵は、あなたのアーキテクチャだけです。私はボタンごとにユニークなアクション方法を提案します。あなたは、ボタンUIButton.tagにタグを追加し、ボタンの間に同じアクションメソッドを使用して必要/好む場合は、しかし、

@IBAction func ButtonOnePressed(sender: AnyObject) { 
    initializeContainerView(withTitle: "Button One Title") 
} 

@IBAction func ButtonTwoPressed(sender: AnyObject) { 
    initializeContainerView(withTitle: "Button Two Title") 
} 

func initializeContainerView(withTitle title: String) { 
    let Storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let ViewController: ContainerView = Storyboard.instantiateViewControllerWithIdentifier("Container") as! ContainerView 
    ViewController.Title_String = title 
    self.View_Controller_Popup.hidden = false 
} 

:これは次のようになります。次に、アクションメソッドでswitch文を使用して、sender.tagを確認し、そのケースのコードを実行します。あなたのinitializeContainerView方法、変更に

@IBAction func Button_Pressed(sender: AnyObject) { 
    switch sender.tag { 
    case buttonOneTagValue: 
     initializeContainerView(withTitle: "Button One Title") 
    case buttonTwoTagValue: 
     initializeContainerView(withTitle: "Button Two Title") 
    default: 
     break 
} 

func initializeContainerView(withTitle title: String) { 
    let Storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let ViewController: ContainerView = Storyboard.instantiateViewControllerWithIdentifier("Container") as! ContainerView 
    ViewController.Title_String = title 
    self.View_Controller_Popup.hidden = false 
} 
+0

私はあなたのコードと他のコードを試しましたが、あなたがその質問を誤解しているように感じます。更新された質問を参照してください。 –

+0

ViewControllerを使用してコンテナビューを更新することができます。.view.setNeedsDisplay() この行を 'initializeContainerView'に最後の行として入れることができます。 –

+0

いいえ、これはまだ動作しません。 –

0

::これは次のようになります

self.Day_Period_String = title 
ViewController.Title_String = self.Day_Period_String 

へ:

ViewController.Title_String = title 

そして、あなたのコンテナビューコントローラには、削除します。

Title_String = ViewController.Day_Period_String 

var Title_String = String() 

:最後に、この行を変更し、これがうまくいかない場合

var Title_String: String! 

、私はあなたがいくつかの印刷行を追加しているつもりです。残念ながら私はXcode 8(とSwift 3)にアップデートしているので、コードを実行することはできません。

+0

私はコードの周りにいくつかのプリントを追加しました。ラベルテキストが正しく設定されているが表示されていないようです。タイトル文字列は空ではなく、ラベルテキストは空ではなく、これをテキストに追加するときは.text = Title_String + "Testing"と表示され、 "Testing"のみ表示されます。ラベルは正しく更新されていませんか? –

+0

Hmm。そのため、UIを更新する必要があるため、データが正しく設定されているように見えるため、setNeedsDisplayの使用を提案していました。あなたのUILabelの幅が小さすぎるため、テキストが表示されないことがありますか?これを確認する1つの方法は、UILabelの幅を印刷することです。または、初期化してテキストを更新した後に行を追加して、サイズがテキストに適合するようにすることができます:Title_Label.sizeToFit() –

+0

しかし、テキストを表示しています。コンソールにラベルを印刷するときに、ラベルを印刷したいものを印刷します。 –

0

こと あなたcontainerViewが親委任プロトコルを拡張し、単にupdateContent FUNC引数を持つ関数を実装する必要がありデリゲートプロトコルを使用してみてください(ID:INT)

protocol ContentDelegate { 
    func updateContent(id: Int) 
} 

class ParentViewController: UIViewController { 
    var delegate: ContentDelegate? 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     if (segue.identifier == "containerController") { 
      let containerVC = segue.destination as! ChildContainerViewController 

      self.delegate = containerVC 
     }   
    } 
} 

class ChildContainerViewController: UIViewController, ContentDelegate { 
    func updateContent(id: Int) { 
    // your code 
    } 
} 
関連する問題