수복의 프로그래밍 여행기
article thumbnail

IBOutlet? IBAction? 

 

너무 생소한 단어

 

찾다보니 간략하게 정의되어 있는 아래의 문장

 

IBOutlet은 컨트롤러 헤더 파일에 선언한 객체를 인터페이스 빌더가 알아 볼 수 있도록 하는 것

하지만 이해 안됨

 

그래서 코드로 만들어 보면서 이해하기

 

간단히 화면에 라이브러리 몇 개를 구성하여 넣기

 

 


 

슬라이더 및 레이블 생성

 

라이브러리(Command+Shift+L)에서 Slider를 검색 후

 

스토리 보드에 슬라이더를 생성 (레이블도 마찬가지)

 


 

스토리보드에 추가한 슬라이더를 Outlet을 통해 연결

 

IBO = (Interface Builder Outlet)

 

여러가지 방법이 있으나,

 

스토리 보드에 슬라이더를 누르고 Control 키를 누른 채 코드로 드래그

 

 

그럼 위와 같은 창이 뜨고 Name 에 원하는 이름을 입력

 

@IBOutlet weak var slider: UISlider!

 

위와 같이 직접 입력도 가능하지만 

 

스토리 보드에서 슬라이더를 Control를 누른 채 코드로 드래그 하면 자동 완성

 

 Label 도 위와 같은 방법으로 드래그 하면 아래와 같은 화면이 나옴

 

 

이름을 입력하면 자동으로 아래와 같은 코드가 생성

 

(1개의 슬라이더와 3개의 레이블이 연결된 상태)

 

그렇다고 모든 레이블을 연결시키는 건 아님

 

레이블의 나타내는 값이 변경이 일어나지 않는다면 연결할 필요가 없다.

 

연결시킨 레이블의 값은 변하게 될 것이므로 연결시켜 주는 것

 

연결을 위해 아래와 같은 작업을 실행

 

초기값을 설정

var valueOfCurrent = Int: 50

 

위치

 

초기값을 설정하는 곳은 클래스가 시작하고 가장 위가 좋음

 

변수의 값 변경

 

변수를 변경하는 방법 중 슬라이더를 이용하여 변경

 

슬라이더를 이용한 변경

 

슬라이더가 변경되면서 값을 얻기 위해 IBAction 을 선언

 

방법은 슬라이더를 연결하는 방법과 같지만

 

연결 부분에서 Outlet 이 아닌 Action 으로 변경

 

이렇게 액션 메소드라는 것을 인터페이스 빌더에게 알려줘 컨트롤러를 통해서 호출이 가능해짐

 

메서드 형식을 가진 IBAction는 void를 리턴 타입을 가지고 변수값을 리턴하지 않는다.

 

액션 메소드는 하나의 인자값을 갖고 이것은 sender라는 이름의 id 타입으로 정의되어 포인터 값이 전달

 

여러 액션들의 메서드들을 통해서 호출된 것들을 구분하는 구분자 역할


버튼이 여러게 있는데 '(id)sender' 를 제거시 모든 버튼이 동일한 역할을 하게 될 것임.

 

생성된 액션 슬라이더에 값을 반올림 하여 valueOfCurrent 변수 값을 변경

valueOfCurrent = lroundf(slider.value)

여기서 사용한 lroundf 은 반올림 하는 함수

 

공식 문서

 

lroundf - Kernel | Apple Developer Documentation

Cancel

developer.apple.com

슬라이더 값을 반올림하여 변수에 저장

 

 @IBAction func sliderMoved(_ sender: UISlider) {
        currentValue = lroundf(slider.value)
    }
    

 

저장된 변수를 가져와 Label 에 보여줄 수 있음

 

scoreLabel.text = String(valueOfCurrent)

 

Label은 String 타입으로 valueOfCurrent 의 Type이 Int 이므로 앞에 String을 맞춰 줌

 

 

 

'IOS > Swift 프로그래밍' 카테고리의 다른 글

[iOS 프로그래밍] Swift 파일 이름 변경하기  (0) 2019.12.04
profile

수복의 프로그래밍 여행기

@컴수복

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!