2014-10-22 3 views
0

Xcode 6을 사용하고 iOS 8을 대상으로하며 Swift에서이 코드를 사용하고 있습니다.Segue가 수행되지 않습니다. iOS8

내 스토리 보드 컨트롤러는 다음과 같다 :

Tab Bar > Navigation > Table View > Detail View 

Show Detail SEGUE는 Detail ViewTable Cell에서입니다.

prepareForSegue 메서드는 표 셀을 클릭 할 때 트리거되지 않습니다. 버튼에서 디테일까지 세그 (Segue)는 잘 작동합니다. (didSelectRowAtIndexPath)도 문제가 없습니다.

나는이 문제를 테스트하는 새로운 테스트 프로젝트를 생성 한 - 컨트롤러 코드는 다음과 같습니다

import UIKit 

class TestTableController: UITableViewController 
{ 
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     return 2; 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    { 
     let cellId = "testCell"; 
     var cell: UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellId) as? UITableViewCell; 

     if (cell == nil) 
     { 
      cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellId); 
     } 

     cell!.textLabel!.text = "cell \(indexPath.item)"; 

     return cell!; 
    } 
} 

어떤 생각이 왜 상자 밖으로 작동하지 않는 이유는 무엇입니까?

P.:Tab Bar 대신 Split View을 사용하면 동일한 세그 효과가 잘 적용됩니다.

+0

8.0.x에서 segues (특히 unwind segues)와 관련하여 많은 문제가 있었지만 지금은 모두 수정되었으므로 Xcode 6/iOS 8.1을 실행하고 있는지 확인하십시오. – Rog

답변

0

방금 ​​샘플 프로젝트로 테스트 해 보았습니다. 그것은 잘 작동합니다. 셀을 배선 할 때 잘못된 것이 있어야합니다.

여기 내 코드입니다. 일반 바닐라 탭 막대 프로젝트 템플릿에서만 변경 사항을 나타냅니다. 당신이 프로토 타입 셀과 대상 컨트롤러를 연결하는 SEGUE를 추가하는 데 필요한 prepareForSegue 메소드를 호출

enter image description here

// FirstViewController.swift 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 2 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell 
    cell.textLabel?.text = "Cell \(indexPath.row + 1)" 
    return cell 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let detail = segue.destinationViewController as DetailController 
    let cell = sender as UITableViewCell 
    let indexPath = self.tableView.indexPathForCell(cell) 
    detail.detailItem = "Cell \(indexPath!.row + 1)" 
} 

//DetailController.swift 
class DetailController: UIViewController { 

    var detailItem : String! 
    @IBOutlet var label : UILabel! 

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
     label.text = detailItem 
    } 
} 
+0

그래, 그게 내가 한 일이야 ... 스토리 보드 XML에서 어떻게 보이나요? iOS 8.0 또는 8.1을 실행하고 있습니까? XCode 6.0 또는 베타? – JMicro

+0

6.0.1, 8.0. XML을 정독하지 못했습니다. – Mundi

+0

셀의 ID를 삭제했으며 동일한 값으로 IB에서 다시 설정하고 작업을 시작했습니다. (WTF?) ... 내 코드에 아무런 문제가 없다는 것을 확인하고 나를 혼란에 빠지게 만들었 기 때문에 답을 올바르게 표시했습니다. 세포. – JMicro

0

! 프로그래밍 방식으로 대상 컨트롤러로 이동하면 메서드가 호출되지 않습니다.

+0

실제로 'performSegue'를 프로그래밍 방식으로 사용해도'prepareForSegue'가 호출됩니다. 프로그래밍 방식으로'performSegue'를 호출하지 않고도 작동하기를 바랍니다. – JMicro

1

tableView.register(AnyClass?, forCellReuseIdentifier: String)을 사용하여 ViewDidLoad 메서드에서 셀을 등록 할 때이 문제가 발생했습니다.이 줄을 주석으로 처리하고 스토리 보드에 셀 클래스와 셀 식별자를 추가하면 작업이 시작되었습니다. 다시 viewdidload에서 해당 코드의 주석을 제거하면 작동이 멈 춥니 다.

+0

이것은 올바른 방향으로 나를 가리켰습니다. xib 구현을 스토리 보드로 전환하고 있었고 프로토 타입으로 정의하지 않고도 여전히 사용자 정의 셀의 xib를 사용하고있었습니다. –

관련 문제