2017-11-29 2 views
0

4 개의 UIButton이있는 UIViewController가 있습니다. 사용자는 해당 UIButton 중 하나를 탭할 수 있으며 UIView가 나타납니다. 사용자 동작에 따라 UIView를 보유하고있는 클래스에 didAppear()didDisappear() 함수를 추가하고 싶습니다. 어떻게 예를 들어, 열거를 사용하지 않고 didDisappear()를 호출 할 수 여러 클래스에서 같은 함수를 호출하는 방법은 무엇입니까?

func didDisappear(view: EnumViews){ 
    switch view{ 
     case view0: myClassWithView0.didDisappear() 
     case view1: myClassWithView1.didDisappear() 
     case view2: myClassWithView2.didDisappear() 
     case view3: myClassWithView3.didDisappear() 
    } 
} 

은 지금은 4 번 데이터를 중복 얻을. UIView를 사용하여 클래스에 해당 함수가 있지만 그 함수를 호출하는 방법을 알고 있습니까? 프로토콜을 만들었습니다 :

protocol ViewProtocol{ 
    func didAppear() 
    func didDisappear() 
} 

나는 그 프로토콜을 준수하는 UIView를 보유하고있는 클래스를 만들었습니다.

'myClassWithUIView' cannot be constructed because it has no accessible initializers

클래스가 배열에 모두 내가있는 UIView가 sender.tag에서 팝업 필요가있는 식별 할 수 있습니다 그러나 나는 클래스를 생성 할 때이 오류가 발생, 그것을 사용하는 방법을 모르겠어요. 이상적으로, 저는 다음과 같은 것을 가지고 싶습니다.

@IBAction func bringNewUIView(_ sender: UIButton) { 
let newView = myArrayOfClassesWithUIView[sender.tag] 
newView.didAppear() 
} 

답변

1

당신은 많은 일들이 일어나고 있습니다. 나는 쉬운 것으로 시작할 것이다.

'myClassWithUIView' cannot be constructed because it has no accessible initializers

이것은 단지 자신의 클래스에 대한 초기화 프로그램이 없다는 것을 의미합니다. 따라서 myClassWithUIView 구현 내부에 init이 있어야합니다. init을 작성하는 데 도움이되지는 않습니다. 클래스가 어떻게 구성되어 있는지 모르겠으니 어쨌든 어떻게해야하는지 알고있을 것입니다.

@IBAction이 괜찮아 보입니다. 클래스의 배열이 있으면 작동해야하는 것처럼 보입니다. 그렇지 않은 경우 게시물을 수정하십시오.

마지막으로, didDisappear 질문에 대해, 당신은 같은 것을 할 수 있습니다

func didDisappear(view: EnumViews) { 
    //Check to see if this view conforms to your ViewProtocol (that's not a good name, btw) 
    if let myClass = view as? ViewProtocol { 
    //Since it does conform to ViewProtocol you can call didDisappear on it 
    myClass.didDisappear() 
    } 
} 

을 다른 방법으로, 이미 didDisappear 기능이 항상 이유를 단지 변경하지 ViewProtocol을 준수하는 뷰에 전달하고 있는지 알고있는 경우 인수하고 쉽게?

func didDisappear(view: ViewProtocol) { 
    view.didDisappear() 
} 
+0

예 나는 사람들이 내가 무엇을 의미하는지 쉽게 알 수 있도록 몇 가지 단어를 사용합니다. :) – NoKey

관련 문제