스토리보드로 생성한 뷰컨트롤러 상속 받는 법이 있을까요?

조회수 1887회

스토리보드를 사용하지 않으면 여러가지로 불편한 상황입니다.
세그웨이도 여럿 얽혀있고, 좋은 방법은 아니지만, 쎌 안에 테이블뷰를 넣고 거기에 프로토타입쎌을 넣고 있어서 스토리보드를 사용하지 않으면 불편한 상황입니다.

스토리보드를 이용해서 뷰 컨트롤러를 생성하는데, 리퀘스트나 약간의 기능들을 상황에 따라 바꿔가며 사용하기에 상속을 받고 싶은데요, 스토리보드를 통해 생성된 뷰컨트롤러는 isa가 박혀져 있어서 하위클래스로 캐스팅해봐야 하위클래스의 메소드가 먹질 않습니다.

Objective C로만 작업하던 시절엔 위험을 감수하고 isa 를 직접 바꾸던지 object_setClass 를 이용해서 클래스를 하위클래스로 변경시켜줄 수 가 있었었는데요, Swift 로 넘어오면서 런타임에서 클래스를 변경하는 작업이 녹록치가 않네요.

nib으로 바꾸거나 스토리보드를 사용하지 않는 방법을 제외하고, 어떤 좋은 방법이 있을지 질문드립니다. 제가 구조를 잘못짠것인지, 이런경우에 적합한 디자인 패턴이 있는것인지 고수님들의 의견 바랍니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 이런 경우 저는 api request 를 처리하는 class 를 따로 만듭니다.

    AModel, BModel, CModel

    • API Request 를 처리
    • 화면에 보여줄 데이터를 처리
    • protocol을 이용해서 같은 interface를 가짐

    AViewController

    • 화면에 보여줄 역할만 담당
    • Model을 받아서 Model에서 데이터를 가져온다.

    이런식으로 request 역할을 하는 코드를 따로 빼면 같은 ViewController는 또 만들지 않고 model만 만들면서 사용할 수 있습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 질문의 내용 중

    스토리보드를 통해 생성된 뷰컨트롤러는 isa가 박혀져 있어서 하위클래스로 캐스팅해봐야 하위클래스의 메소드가 먹질 않습니다.

    부분이 이해가 안되는데요,

    Utility 패널의 Identity Inspector에서 Class를 바꾸지 못하는 이유가 있는 듯 한데, 그 이유가 예상이 안되네요. 그리고 swift 코드에서 as? 로 캐스팅이 안되는지요?

    리퀘스트나 약간의 기능들을 상황에 따라 바꿔가며 사용하기에 상속을 받고 싶은데요

    이 경우 UIStoryboard 인스턴스에서 특정 identifier의 뷰 컨트롤러를 코드로 초기화 해서 사용하면 안될까요?

    위 방법이 안된다면 조금 더 자세한 상황 설명 바랍니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • AViewController 가 있고 A api 로 데이터를 가져와 테이블뷰에 데이터를 보여줍니다. AViewcontroller 는 스토리보드로부터 생성하구요. BViewController 와 CViewController 있습니다. 이친구들은 AViewController 와 화면 렌더링이나 동작은 똑같지만 각각 B Api 와 C Api 로부터 데이터를 가져와 뿌려줍니다. 그래서 AViewController에서 상속받아 B,C Viewcontroller 를 만들고 싶은 상황입니다. 알 수 없는 사용자 2016.3.3 22:18
    • 스토리보드로 부터 AViewController 를 instantiateViewControllerWithIdentifier 를 통해 생성하면 생성된 객체는 무조건 AViewController 클래스가 됩니다. instantiateViewControllerWithIdentifier를 통해 생성하지 않으면 뷰가 그려져있지 않은 뷰컨트롤러가 생성됩니다. 알 수 없는 사용자 2016.3.3 22:23

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)