2017-02-10 5 views
0

나는 Xcode 8.2, 스위프트 3, iOS 10을 사용하고 있습니다. 제목이 이해하기 어려울 수 있음을 알고 있으므로 내가하려는 것을 설명해 드리겠습니다.UITableViewCell에 대한 세부 정보는 단추를 클릭 한 후 세부 정보로 점프하는 동안 어떻게 만듭니 까?

저는 TabViewController에 3 명의 자식 ViewControllers을 가지고 있습니다. 각각 NavigationController 및 기타 내용이 있습니다. 그러한 탭 중 하나가 아래에 나와 있습니다 (탭 1). 이것은 TableViewController입니다. 내 맞춤을 보여줍니다. TableView세포 정보가 있습니다. 다른 탭 (예를 들어, 탭 2)에

enter image description here

, 내가 버튼 클릭에 표 1에 셀을 추가하고있다. 나는이 일을 잘하고있다. 이제 내가 원하는 동작은 사용자가 탭 2에서 동일한 버튼을 클릭 할 때 이전과 마찬가지로 셀을 추가하고 해당 셀의 상세보기를 추가하고 해당 상세 뷰로 이동한다는 것입니다 (탭 1로 전환하고 해당 셀을 클릭해야 함). 이 세부 정보보기에서 나는 Back 단추가 있으면 모든 세부 정보보기에 액세스하는 탭 1로 되돌아갑니다.

나는이 행동을 성취 할 수있는 올바른 방법을 찾아 내려고 노력했기 때문에 어떤 도움을 주시면 대단히 감사하겠습니다. 고맙습니다!

편집 나는 아래 겨울의 응답의 기반으로 약간의 편집을했다. 그러나 새로 만든 UIViewController을 Table View 셀에 "연결"할 수 없습니다.

탭 2에

가 :

표 1에서
// this code is located in a function where I call to create a new custom cell in Tab 1. 

//Switch to first tab 
tabBarController?.selectedIndex = 0 

//Show the detail view 
if let navigationController = tabBarController?.viewControllers?[0] as? UINavigationController { 
    let detailViewController = UIViewController() 
    detailViewController.view.backgroundColor = UIColor.red 
    navigationController.pushViewController(detailViewController, animated: true) 

    let tempNavVC = self.tabBarController?.viewControllers?[0] as! UINavigationController 
    let resultsTab = tempNavVC.viewControllers[0] as! Tab1VC 
    resultsTab.detailVCArray.append(detailViewController) 
} 

: 나는 그것을 실행하면

// this is an array that holds the newly created view controllers passed in from Tab 2 
// when the user clicks on a cell, look up which cell it clicked on and display the view controller for that cell 
var detailVCArray = [UIViewController]() 

// called when a cell is clicked 
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    let newChildVC = detailVCArray[indexPath.row] 
    self.addChildViewController(newChildVC) 
    self.present(newChildVC, animated: true, completion: nil) 
} 

, 탭 2의 코드가 성공적으로 실행하고 나는

나는 다음과 같은했다 빨간색 배경의 새 View Controller가 제공됩니다. 나는 테이블 뷰 셀을 클릭하면 그러나, 오류 아웃 :

'NSInvalidArgumentException', 이유는 : '응용 프로그램은 같은 붉은보기에 segueing의

대신 모달 활성 컨트롤러를 을 제시하려 제어 장치.

나는 이것이 아마도 어리석은 방법이라고 생각하지만, 다른 것을 생각할 수는 없다.

하루가 끝나면 내 탭 2에서 세부 정보가있는 일부보기 컨트롤러가 포함 된 표 1에서 표보기 셀을 만들고 그 세부 정보로 "전환"합니다.

+0

당신이 detailView에 보여주고 싶은 것을 다음의 모든 세부 사항을 겪고있는 휴대 정보 TAB2를 작성하는 경우. 권리? –

+1

'UITabViewController'가 아니라'UISplitViewController'를 원한다고 들립니다. – NRitH

+0

셀을 추가하는 코드는 어디에 있습니까? – Callam

답변

2

코드는 다음과 같다 :

//Click function in viewController of Tab 2 
func click(_ sender: Any) { 
    //Adding cells into Tab 1 

    //Switch to Tab 1 
    tabBarController?.selectedIndex = 1 

    //Show the detail view 
    if let navigationController = tabBarController?.viewControllers?[1] as? UINavigationController { 
     let detailViewController = UIViewController() 
     detailViewController.view.backgroundColor = UIColor.white 

     navigationController.pushViewController(detailViewController, animated: true) 
    } 
} 

//Code in viewController of Tab 1 
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    //For example: need to show detail view when row is 1 
    if indexPath.row == 1 { 
     //Show the detail view 
     let detailViewController = UIViewController() 
     detailViewController.view.backgroundColor = UIColor.white 

     navigationController?.pushViewController(detailViewController, animated: true) 
    } 
} 
+0

겨울, 고마워요. 이것은 많은 도움이되지만 새로 만든 View Controller를 Table View Cell에 "연결"하는 방법을 알아 내려고하고 있습니다. 나는 원래의 글을 편집했다. – noblerare

+0

'func tableView (_ tableView : UITableView, didSelectRowAt indexPath : IndexPath) '에서 유사한 코드를 사용하여 상세 뷰를 표시해야합니다. – Winter