2017-10-30 1 views
0

UIBarButtonItem이 있고 다른 클래스에서 pushViewController를 원합니다. 그래서 내가있는 viewDidLoad에서 코드 줄이 있습니다UIBarButtonItem -> 인스턴스로 전송 된 인식 할 수없는 선택기 (Swift 4)

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named:"settings"), style: .plain, target: self, action: #selector(GoToPages.goToSettings(_:))) 

이 내 GoToPages 클래스입니다 :

import UIKit 

class GoToPages: UIViewController { 

    @objc func goToSettings(_ sender:UIBarButtonItem) { 

     let button = sender 

     switch button.tag { 
     case 0: 
      let settingsPageView = self.storyboard?.instantiateViewController(withIdentifier: "Notifications") 
      self.navigationController?.pushViewController(settingsPageView!, animated: true) 
     case 1: 
      let settingsPageView = self.storyboard?.instantiateViewController(withIdentifier: "Settings") 
      self.navigationController?.pushViewController(settingsPageView!, animated: true) 
     default: 
      return 
     } 
    } 
} 

하지만 난이 오류가 발생합니다 : 인식 할 수없는 선택기 인스턴스에 보냈다. 파라미터의 target

+0

코드의 첫 번째 줄에 어떤 클래스? 즉, 버튼 항목을 만들 때 정확히 'self'는 무엇입니까? – rmaddy

답변

1

값이 구현되는 클래스 action 인스턴스이어야한다.

self

action 현재의 클래스에서 구현되는 것을 의미한다.

+0

그럼 올바른 코드는 무엇입니까? 나는 목표를 시도했다 : GoToPages.self하지만 작동하지 않는다 ... – Flincorp

+0

필자는 다음과 같이 썼다 : * ... 반드시 클래스 * 인스턴스 ** 여야한다. 'GoToPages'의 실제 인스턴스에 대한 참조가 필요합니다. – vadian

+0

이제보십시오 : self.navigationItem.rightBarButtonItem = UIBarButtonItem (이미지 : UIImage (이름 : "settings"), 스타일 : .plain, target : GoToPages(), action : #selector (GoToPages.goToSettings (_ :)) 지금 오류는 없지만 바 버튼 항목을 클릭 할 때 추가가 표시됩니다 ... – Flincorp

0

내 코드 :

수입 UIKit

확장의 UIViewController {

@objc func goToPage(_ sender: Any) { 

    guard let button = sender as? UIBarButtonItem else { 
     return 
    } 

    switch button.tag { 
    case 0: 
     let settingsPageView = self.storyboard?.instantiateViewController(withIdentifier: "Notifications") 
     self.navigationController?.pushViewController(settingsPageView!, animated: true) 
    case 1: 
     let settingsPageView = self.storyboard?.instantiateViewController(withIdentifier: "Settings") 
     self.navigationController?.pushViewController(settingsPageView!, animated: true) 
    default: 
     return 
    } 
} 
관련 문제