2017-10-22 2 views
0

당신은 내 방식을 확인하고 몇 가지 조언을 나에게패스 데이터의 TableView 셀

그래서, 내장 된 네비게이션을 제공 할 수 있습니다 제발 내가있는 tableview 사이의 통신을 만들려고하고 상세보기

의를 눌러 컨트롤러에서 테이블보기

그리고 나는 tableview(_:didSelectedRowAt) 메서드를 사용하지 않았습니다. 유래에

일부 답변, 그들은 prepare(:) 방법을 무시하고 tableview(_:didSelectedRowAt)

에서 performSegue(withIdentifier:) 방법을 쓰기하지만 난 두 개의 화면이 표시되었다 위처럼 코드를 작성하는 경우 말했다. 이 SEGUE 작업을 사용하여

I 드래그 앤 테이블 뷰 셀에서 상세보기에 SEGUE 액션 (푸시)을 드롭 (친구 이름 셀)

은 (SEGUE 작업을 두 번 트리거 때문에 나는 생각한다) 나는 상세보기

에서 선택한 친구의 이름을 편집 prepare(:segue) 방법으로 데이터를 전달할 수 있으며, 내가 자세히보기의 텍스트 필드에서 친구 이름을 편집하는 경우, 언 와인드 SEGUE에게 트리거 edit 버튼이

,

그래서 상세보기 컨트롤러

에서 prepare(:segue) 메소드를 오버라이드 (override)이 테이블보기와 상세보기를 통신하는 적절한 방법입니다 테이블보기의의 ViewController

@IBAction func getEditedNameFromDetailView(_ sender:UIStoryboardSegue){ 
    if sender.source is DetailViewController { 
     if let senderVC = sender.source as? DetailViewController { 
      data[(self.someTableView.indexPathForSelectedRow?.row)!] = senderVC.editedData! 
     } 
     someTableView.reloadData() 
    } 
} 

에 아래의 코드를 작성?

답변

1

귀하의 설명에서 2 개의 단서가있을 수 있습니다. 하나는 스토리 보드에, 다른 하나는 코드에 있습니다.

준비 메소드가 연속을 수행하지 않습니다. 예를 들어 목적지 컨트롤러에 데이터를 전달하는 것과 같이 세그 (segue)와 관련된 작업을 수행 할 수있는 기회를 제공하기 만하면됩니다. StoryBoard에 이미 하나를 만들었다면 segue를 수행하지 말고 그 반대도 마찬가지입니다.

과 같이 표시됩니다 준비의 일반적인 사용 :

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     //get the destination controller and cast it to your detail class 
     if let destinationController = segue.destination as? YourDetailClassHere { 
      //set the properties you want 
      destinationController.someProperty = someValue 
     } 
    } 

몇 가지 참고 사항 -

  • 당신이 수행 전화에서 데이터를 전달하기 위해 보낸 사람의 개체를 사용할 수 있습니다.
  • 일반적인 실수는 대상 컨트롤러가 항상 세부 컨트롤러라고 가정하는 것입니다. 네비게이션 컨트롤러가 될 수 있으며 그러면 네비게이션 컨트롤러에서 세부 정보를 추출해야합니다.