2017-02-01 16 views
0

내 모든보기 컨트롤러는 탭 막대 컨트롤러를 사용하여 연결되며 잘 작동합니다. 내 유일한 문제는 popover가 표시되어 적절한 상황에서 다른보기 컨트롤러로 사용자를 보낼 수없는 경우입니다. 나는 몇 가지 관련 코드를 여기에popover의 unwind segue를 통해 tabbarcontroller를 사용하여보기로 이동하는 방법

tabBarController.selectedIndex = 1

입니다 사용하여 시도 :

픽업에 대한 팝업이 트리거 어디
//user selects a row this function triggers an event 
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    if tableView == self.tableviewlineneeds 
    { 
     forklift.paramneeds = "\(forklift.k)&f=\(forklift.forkliftid)&id=\(forklift.needuniqueid[(indexPath as NSIndexPath).row])&o=" 
     let popneeds = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "verifyneedsaction") as! NeedsActionPopover 
     popneeds.modalPresentationStyle = UIModalPresentationStyle.popover 
     popneeds.popoverPresentationController!.delegate = self 
     popneeds.popoverPresentationController?.permittedArrowDirections = .any 
     popneeds.popoverPresentationController?.sourceView = tableviewlineneeds 
     popneeds.popoverPresentationController?.sourceRect = tableviewlineneeds.rectForRow(at: indexPath) 
     popneeds.preferredContentSize = CGSize(width: 225, height: 180) 
     popneeds.needitem = forklift.itemneeds[(indexPath as NSIndexPath).row] 
     self.present(popneeds, animated: true, completion: nil) 
    } 
    if tableView == self.tableviewlinepickup 
    { 
     forklift.parampickup = "\(forklift.k)&f=\(forklift.forkliftid)&id=\(forklift.pickupuniqueid[(indexPath as NSIndexPath).row])&o=" 
     let poppickup = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "verifypickupaction") as! PickupActionPopover 
     poppickup.modalPresentationStyle = UIModalPresentationStyle.popover 
     poppickup.popoverPresentationController!.delegate = self 
     poppickup.popoverPresentationController?.permittedArrowDirections = .any 
     poppickup.popoverPresentationController?.sourceView = tableviewlinepickup 
     poppickup.popoverPresentationController?.sourceRect = tableviewlinepickup.rectForRow(at: indexPath) 
     poppickup.preferredContentSize = CGSize(width: 300, height: 180) 
     forklift.pickuplocation = forklift.locationpickup[(indexPath as NSIndexPath).row] 
     poppickup.pickupitem = forklift.itempickup[(indexPath as NSIndexPath).row] 
     self.present(poppickup, animated: true, completion: nil) 
    } 
} 

. 여기 언 와인드 SEGUE입니다 :

@IBAction func unwindLinePickup(_ segue: UIStoryboardSegue) 
{ 
    if segue.identifier == "confirm" 
    { 
     switch forklift.pickuplocation 
     { 
     case "Line 2": 
      self.sendToMoveView() 
     case "Line 3": 
      self.sendToMoveView() 
     case "Line 7": 
      self.sendToMoveView() 
     case "Line 8": 
      self.sendToMoveView() 
     default: 
      API.HTTPCall(forklift.parampickup, url: forklift.postmove!, method: "POST", int: 10) 
     } 
    } 
} 

이 스캐너 뷰 컨트롤러에 보내 내 기능입니다 : 내 viewDidAppear 재정과 같은 장소에서 tabBarController.selectedIndex를 사용하여 시도

func sendToMoveView() 
{ 
    guard let tabBarController = tabBarController else { return } 
    tabBarController.selectedIndex = 1 
} 

기본 또는 레이아웃 하위보기를 설정하는 데 사용되며 AppDelegate에서 사용하기 전에 기본보기를 설정했습니다. 그렇다면 VC에서 다른 방법으로 탐색하면 탭 막대가없는 VC가 생기기 때문에이 상황에서 사용하려면 어떻게해야합니까? (감사합니다.)

답변

0

단서를 찾았습니다. 이 질문에 대한 답변 : Change UITabbar selectedItem in Swift

내가 다음 초기 뷰 컨트롤러에서 내 언 와인드 SEGUE을 제거하고 탭 표시 줄 컨트롤러로를 내장하고 다음과 같이 내 sendToMoveView 기능 변경 :

func sendToMoveView() 
{ 
    self.selectedViewController = self.viewControllers?[1] 
} 

나는 또한 redid을 스토리 보드의 연결 고리가 정확한 컨트롤러를 보여주고 있었지만 안전 할뿐입니다. o 당신이 tabbar 컨트롤러에 적절한 스토리 보드 ID를 부여하지 않으면 내가 만든 변경이 작동하지 않을 것이라고 지적합니다. 이 하나가 내게 머리 통증을 주었다.