2016-10-08 2 views
0

보기 컨트롤러 안에 컨테이너보기가 있습니다. 사용자가 버튼을 누르면 컨테이너보기가 표시되지만 컨테이너보기의 텍스트는 사용자가 누른 버튼을 기반으로합니다. 이렇게하려면 Container View를 업데이트해야하지만이 작업을 수행하는 방법에 대해 잘 모릅니다. 컨테이너 내용보기 업데이트

내 컨테이너보기 코드입니다 :

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

을 embed segue를 사용합니다. 포함 된 ViewController에서 포함 된보기 컨트롤러에 대한 참조를'prepareForSegue'에 넣고 포함 된 segue를 찾을 수 있습니다. 속성에 참조를 저장하면 필요할 때마다 함수에서 해당 함수를 호출 할 수 있습니다. – 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 
} 

:이 같이 보일 것입니다. 그런 다음 action 메소드에서 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 (및 따라서 스위프트 3) 업데이트 된 있으므로 코드를 실행할 수 없습니다.

+0

그래, 코드 주위에 인쇄물을 추가했는데 라벨 텍스트가 올바르게 설정되어 있지만 표시되지 않는 것 같습니다. 제목 문자열은 비어 있지 않습니다. 레이블 텍스트는 비어 있지 않지만 텍스트에 추가 할 때 : .text = Title_String + "Testing"이면 "Testing"만 표시됩니다. 레이블이 올바르게 업데이트되지 않습니까? –

+0

흠. 그래서 setNeedsDisplay를 사용하는 것이 좋습니다. UI가 업데이트되도록 강제해야하므로 데이터가 올바르게 설정되어있는 것처럼 보입니다. 어쩌면 당신의 UILabel 너비가 너무 작아서 텍스트를 표시하지 않을 수 있습니까? 이것을 확인하는 한 가지 방법은 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 
    } 
}