2016-07-23 4 views
2

궁극적 인 목표는 변수를 전달하면서 다른보기 컨트롤러로 이동하는 것입니다.tableView에서 prepareForSegue로 변수를 전달 하시겠습니까?

여기 내 코드입니다 :

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let name : String=arrDict[indexPath.row].valueForKey("name") as! String 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if segue.identifier == "SecondSegue" { 
     let viewController = segue.destinationViewController as! SecondViewController 
     viewController.passedVariable = name 
    } 
} 

당신이 볼 수 있듯이, 나는 기능 prepareForSegue에 변수 name를 전달하려합니다. 내가 말했듯이 궁극적 인 목표는 다른 뷰 컨트롤러에 변수를 전달하고 해당 뷰를 여는 것입니다.

지금 당장 prepareForSegue가이를 수행 할 수 있지만 전달 된 변수 만 필요합니다. 어쩌면 거기에 직접 func tableView 할 수있는 방법이 있습니까?

+0

셀을 클릭 할 때 세그먼트를 채우시겠습니까? – Sethmr

+0

@Sethmr yes do do do – johnniexo88

답변

1
var name: String?  

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     name = arrDict[indexPath.row].valueForKey("name") as? String 
     performSegueWithIdentifier("SecondSegue", sender: nil) 

    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
     if let viewController = segue.destinationViewController as? SecondViewController { 
      if name != nil { 
       viewController.passedVariable = name! 
      } else { 
       print("failed to get name from dictionary") 
      } 
     } 
    } 

나는 이것이 당신이 찾고있는 것이라고 생각합니다. 이 함수는 일반적으로 tableViews 수명 기간 동안 여러 번 호출되기 때문에 cellForRowAtIndexPath에 변수 이름을 할당하지 마십시오. 또한 "이름"은 하나의 함수에서 할당하고 다른 함수에서 전달할 수 있도록 클래스 변수 여야합니다. cellForRowAtIndexPath는 tableView의 각 개별 셀의 값과 UI를 지정하는 함수입니다. 다른 일을 할 수있는 기회는 거의 없습니다.

+0

이것을 자세히 설명해주십시오. "이 함수는 일반적으로 tableViews 수명 기간 동안 여러 번 호출되기 때문에 cellForRowAtIndexPath에 변수 이름을 지정하지 마십시오." – johnniexo88

+0

tableView.reloadData()를 호출 할 때마다 cellForRowAtIndexPath가 테이블 뷰에있는 모든 셀에 대해 호출됩니다. 함수 내에서 변수 이름을 선언하면 함수 외부에서 사용되지 않으므로 함수의 지역 변수이므로 현재 디자인의 두 번째 변수는 원하는 셀이 아닌 tableView의 마지막 요소와 항상 동일합니다. 여기서 name의 값을 설정하려면 선택한 셀을 추적하는 또 다른 변수를 설정해야하며 단지 외적인 것일뿐입니다. – Sethmr

1

코드를 didSelectRowAtIndexPath 메소드에 넣으십시오. 선택한 indexPath를 인스턴스 변수에 저장하고 segue를 호출합니다.

prepareForSegue에서 저장된 indexPath를 사용하여 모델에서 필요한 문자열을로드하고 대상 VC (viewController)로 전달합니다.

+0

이 코드를 어디에 게시 할 수 있습니까? – johnniexo88

+0

나는 실제 학습보다 복사/붙여 넣기를 유도한다고 생각하기 때문에 간단한 단계를위한 코드를 게시하는 팬이 아닙니다. 그러나 @Sethmr은 예제 코드를 제공했습니다. –

관련 문제