2016-10-19 3 views
0

다른 ViewController의 메뉴에 UIButton이 있습니다. 그들 모두는 똑같이 보입니다. 읽지 않은 메시지가 있거나 다른 이벤트가 발생하면 모든 ViewController에서 메뉴 단추의 이미지를 변경하려고합니다. 모든 ViewController에서 수동으로 변경하지 않고 어떻게 수행 할 수 있습니까?다른 ViewController에서 UIButtons를 자동으로 변경합니다.

답변

1

간단한 해결책은 들어오는 메시지가 발생할 때 반복 할 수있는 UIButton의 배열을 유지하는 것입니다.

let buttons: [UIButton] = [view1.button1, view2.button2] 
... /// when event happens 
for button in buttons { 
    button.backgroundColor = UIColor.red 
} 

버튼이 값 유형이 아닌 참조 유형이기 때문에 효과가 있습니다.

그러나 이것은 이벤트를 처리하는 방법에 대한 전반적인 디자인 문제와 더 비슷합니다. 들어오는 이벤트를 UI에 바인딩하려면 RxSwift 또는 ReactivCocoa을 조사하는 것이 좋습니다.

1

UIButton에서 상속. 상속 된 버튼 클래스에서 버튼 이미지를 변경할 셀렉터를 등록합니다. 당신은 당신이 함정에 원하는 이벤트를 트리거 할 때마다

NotificationCenter.default.addObserver(self, selector: #selector(updateButton), name: NSNotification.Name("myEventIdentifier"), object: nil) 

지금, 당신은 통지를 게시하고 당신의 버튼의 등록 된 각 인스턴스에 대한 당신의 선택을 호출하여 변경을 트리거 :

NotificationCenter.default.post(name: NSNotification.Name("myEventIdentifier"), object: nil) 
관련 문제