2016-08-27 3 views
1

TableViewController에서 선택한 셀의 레이블을 전달하려고합니다. 두 개의 Back to Back 단추를 눌렀을 때 TableViewController에서 정적 셀의 레이블로 돌아갑니다. 임이 didSelectRowAtIndexPath()에서 정확한 라벨을 얻었습니다. 하지만 데이터를 인쇄하려고하면 다시 전달되지 않습니다. 나는 여러 가지 시나리오를 시도하고 최후의 수단으로 여기 왔습니다. 어떤 도움을 주셔서 감사합니다 감사합니다!데이터가 이전 tableview 컨트롤러로 다시 전달되지 않습니다

tableviewcontroller 하나

class SearchTableViewController: UITableViewController, SortProtocol { 

var sort: String? 

override func viewDidLoad() { 
    super.viewDidLoad(

    SORTBYCELL.detailTextLabel?.text = sort 


} 
    func passdata(sort: String?){ 
    self.sort = (sort) 
    } 

TableViewController 2 : 당신이 (예를 들어 그것을 중단 점을 설정하여) delegatenil 아니라는 것을 확인하는 경우

protocol SortProtocol { 
func passdata(sort: String?) 
} 
class SortByTable: UITableViewController { 

var delegate: SortProtocol? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
} 

override func tableView(tableView: UITableView,   didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let current = tableView.cellForRowAtIndexPath(indexPath)! as UITableViewCell 

    let sort = current.textLabel!.text! 

    self.delegate?.passdata(sort) 
+0

VC2에서, 당신은 VC1에 대한 참조를 가져 및 대리자에 할당해야합니다 같이 따라서, SortByTable에 viewDidLoad()는 볼 것이다. 네비게이션 컨트롤러를 사용하고 있습니까? – Shades

+0

뷰를로드 할 때 viewDidLoad가 한 번만 실행되기 때문에이 'SORTBYCELL.detailTextLabel? .text = sort' '을 func passdata (sort : String?) {...}에 넣으십시오. – KSR

답변

0

위임자를 지정해야합니다. "뒤로"버튼이 있으면 네비게이션 컨트롤러를 사용하고 있다고 가정합니다. 이를 사용하여 첫 번째 viewController에 대한 참조를 얻습니다.

override func viewDidLoad() { 
    super.viewDidLoad() 

    let searchVC = self.navigationController?.viewControllers[0] as! SearchTableViewController 
    self.delegate = searchVC 

    tableView.delegate = self 
} 
+0

체크 표시를 유지하는 방법에 대한 아이디어 사용자가 "SortByTable"로 돌아갈 때 내 문제를 해결 한 도움을 주신 것을 감사합니다 –

+0

@JoeDodge 이전에 선택한 행의 체크 표시가 되었습니까? 선택한 셀을 추적하는 변수가 필요합니다. iewController가 화면에 다시 나타나면 변수를 확인하고 그 행을 선택하도록 – Shades

+0

네, 그걸 잘 살펴보세요 ... 웹 개발을 수행하면서 약 한 달 전에 iOS 애플리케이션을 작성하기 시작했습니다. 나는 너의 도움에 감사한다 –

0

귀하의 코드는 언급하지 않습니다.

최선의 선택 UITableViewCell들 업데이트 데이터 소스 방법을 통해 그렇게하는 것입니다

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

따라서, 귀하의 경우, sort의 새 값으로 passdata 갱신하면 데이터 원본을 확인 후 tableView.reloadData() 전화 셀을 다시로드하십시오.

+0

셀 레이블은 정적입니다. 아웃렛을 파일의 각 셀 레이블에있는 반면 내가 선택한 셀을 배열에서 있습니다. 나는 segue에 대한 준비와 함께 작업을했지만 그것을 이렇게하는 것이 좋습니다. 셀을 클릭하면 올바른 레이블을 인쇄합니다. 그냥 통과하지 않을 것입니다 –

+0

데이터 소스를 사용하는 것은 방법입니다,'IBOutlet'을 프로토 타입 셀에 클래스에서 설정하면 확실하지 않습니다. – paulvs

관련 문제