아래 코드는 테이블 뷰에서 행을 사용자가 터치 할 때 프로그래밍 방식으로 뷰 컨트롤러를 표시합니다. 코드는 'didSelectRowtIndex'경로에 상주하며 테이블 뷰는 ViewController 클래스에 상주하며 테이블 뷰 델리게이트를 구현했습니다. 내가 겪고있는 문제는 현재 표시하려고하는 뷰 컨트롤러가 테이블 뷰 행의 두 번째 터치에만 나타납니다. 그러나 부모 뷰 컨트롤러가 처음으로로드되면 첫 번째 터치에 나타납니다. 아래는 아이 뷰 컨트롤러의 두 프레 젠 테이션을위한 'didSelectRowAtIndexPath'의 코드는 다음과 같습니다ViewController Presentation Swift 3
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 0 {
let stockTable = StockTableVC()
self.present(stockTable, animated: false, completion: nil)
}
else indexPath.row == 1 {
let accountTable = AccountTableVC()
self.present(accountTable, animated: false, completion: nil)
}
...
모두 위의 행 선택시마다 호출되고되지만,에 somtimes 제시되지 않은 현재 뷰 컨트롤러 방법 첫 번째 선택 (또는 적어도 표시되지 않음). 이 수수께끼를 가진 어떤 도움든지 중대 할.
- 고마워요.
흥미 롭습니다. 고맙습니다. 위의 행 선택 해제 솔루션은 잘 작동하지만 문제가있는 경우 후자를 사용해 보겠습니다. – jdeckman
지연 시간이 0.1 초 이상 걸리면 어떻게 될까요? 앱이 다운됩니다. 이 행을 선택 해제하는 것보다 왜 이것을 사용하는 것이 가장 좋습니다. –
@JuanCurti 타이밍에 관한 것이 아닙니다. 그것은 스레딩에 관한 것입니다. 따라서, 더 짧은 지연도 신뢰성있게 작동 할 것이다. 여기에서 사용하는 기술은 주 스레드를 종료하고 runloop을 완료하고 다음 runloop의 주 스레드로 되돌아 오는 것입니다. 우리는 우리가'didSelect'에있는 메소드가 완료 될 것이고 호출 스택 전체가 끝날 것이라고 확신하고 있습니다. 왜냐하면 그때까지 우리는 메인 스레드로 돌아갈 수 없기 때문입니다. 그리고 그 시점에서, 그리고 그 시점에 _only_, 우리는 프리젠 테이션을 시작하는 것이 안전합니다. – matt