Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

런타임에 UIBarButtonItem의 타겟(Target)과 액션(Action)을 설정하는 방법

런타임에 UIBarButtonItem의 타겟(Target)과 액션(Action) 설정하기

iOS 개발을 하다 보면 UIBarButtonItem의 타겟과 액션을 코드로 동적으로 설정해야 하는 경우가 종종 있습니다. 이 글에서는 런타임에 내비게이션 바에 버튼을 추가하고, 해당 버튼에 액션을 연결하는 방법을 단계별로 살펴보겠습니다.

1. 새 프로젝트 생성 및 내비게이션 컨트롤러 임베드

먼저 Xcode에서 새 프로젝트를 생성합니다. 프로젝트가 만들어지면 스토리보드로 이동하여 ViewController를 선택한 뒤, Editor → Embed In → Navigation Controller 메뉴를 통해 내비게이션 컨트롤러 안에 임베드합니다.

2. 버튼이 눌렸을 때 호출될 함수 작성

이제 해당 뷰 컨트롤러 클래스로 이동하여, 버튼이 눌렸을 때 호출될 @objc 함수를 하나 만듭니다.

@objc func barButtonAction() {
    print("Button pressed")
}

3. viewWillLayoutSubviews에서 바 버튼 생성하기

클래스에 viewWillLayoutSubviews 메서드를 추가하고, 그 안에서 다음 순서대로 코드를 작성합니다.

먼저 바 버튼 인스턴스를 생성합니다.

let barButton = UIBarButtonItem()

다음으로 버튼에 표시될 타이틀을 지정합니다.

barButton.title = "custom"

그다음 셀렉터(#selector)를 사용해 커스텀 액션을 연결하고, 타겟을 self로 설정합니다.

barButton.action = #selector(barButtonAction)
barButton.target = self

마지막으로 완성된 버튼을 애플리케이션의 내비게이션 바에 추가합니다.

self.navigationItem.setLeftBarButton(barButton, animated: true)

4. 전체 코드 정리

지금까지 작성한 내용을 모두 합치면 전체 코드는 다음과 같습니다.

override func viewWillLayoutSubviews() {
    let barButton = UIBarButtonItem()
    barButton.title = "custom"
    barButton.action = #selector(barButtonAction)
    barButton.target = self
    self.navigationItem.setLeftBarButton(barButton, animated: true)
}

@objc func barButtonAction() {
    print("Button pressed")
}

5. 실행 결과 확인

기기나 시뮬레이터에서 위 코드를 실행하면 내비게이션 바 왼쪽에 "custom"이라는 버튼이 나타납니다. 이 버튼을 여러 번 누르면 콘솔에 아래와 같이 로그가 출력되는 것을 확인할 수 있습니다.

런타임에 UIBarButtonItem의 타겟(Target)과 액션(Action)을 설정하는 방법

 런타임에 UIBarButtonItem의 타겟(Target)과 액션(Action)을 설정하는 방법

참고: 실제 프로젝트에서는 viewWillLayoutSubviews 대신 viewDidLoad에서 버튼을 한 번만 설정하는 것이 좋습니다. viewWillLayoutSubviews는 레이아웃이 변경될 때마다 반복적으로 호출되므로, 불필요하게 버튼 설정 코드가 여러 번 실행될 수 있기 때문입니다.