2017-11-04 9 views
0

디테일 뷰 컨트롤러가 있는데 동일한 디테일 뷰 컨트롤러를 보여주고 싶지만 다른 항목을 표시하고 싶습니다.동일한 뷰 컨트롤러를 다른 정보로 다시로드하십시오.

var nexttype : Type! 
let nexttypeVC = TypeDetailVC() 


@IBAction func buttonTapped(_ sender: UITapGestureRecognizer) { 

    nexttype = type.Array![0] 
    nexttypeVC.type = next.type 

    self.navigationController?.pushViewController(nexttypeVC, animated: true) 


} 

올바른 이름이나 항목의 식별자를 인쇄 할 때 시뮬레이터를 시작할 때 오류가 발생합니다. 레이블 값은 모두 0입니다.

다시 컨트롤러에 다른 항목으로 다시로드하라는 메시지를 표시하려면 어떻게해야합니까?

+0

어디서 새로운 데이터를 얻고 있습니까? – ivarun

+0

하나의 셀과 함께 tableView를 사용하여 뷰를 디자인하고 변경할 수 있도록 다시로드하면됩니다. –

답변

-4

같은보기 컨트롤러를 탐색 스택으로 푸시하는 대신. 모든 로직을 정렬하여 UI 요소를 메소드로 업데이트하십시오. viewDidLoad()에서이 메소드를 호출하십시오. self.viewDidLoad()을 호출하는 것은 좋은 생각이 아닙니다.

관찰자 패턴을 사용하고 UI 요소를 업데이트하는 메소드를 호출하십시오.

+0

감사합니다! 그것은 일했다! – Maruta

+2

'viewDidLoad'를 호출하지 마십시오; 데이터를 기반으로 UI 요소를 설정하고'viewDidLoad'와 새 데이터를로드 할 때 함수를 호출하는 함수를 작성하십시오. – Paulw11

+1

viewDidLoad()를 호출하는 것은 정말 나쁜 습관입니다. – OverD

0

pushViewController 대신 performSegue (withIdentifier :)를 호출하십시오. 프로그래밍 방식으로 세그를 등록하거나 스토리 보드를 통해 추가해야합니다. 그런 다음 prepare (for segue : sender :)를 사용하여 대상 ViewController에 원하는 항목을 지정하십시오. destination의 viewDidLoad()는 prepareForSegue 뒤에 이라고합니다.

이것은 대상 ViewController에로드하기 전에 필요한 데이터를 시드하기 위해 Apple에서 권장하는 표준 방법입니다.