카테고리 없음

iOS) TIL #20 계산기 앱 만들기 Lv 2 UIView 와 UIButton

yjuni22 2024. 11. 15. 22:14

Lv 2

 

과제 내 힌트

힌트: 
func makeHorizontalStackView(_ views: [UIView]) → UIStackView
 와 같은 형태로 horizontalStackView 를 생성하는 메서드를 정의해두면 좋습니다. 똑같은 스택뷰 4줄이 필요하기 때문이죠.

 

메서드를 이용하면 위와같은 스택 뷰 생성을 반복할 때 도움이 될 것 같다.

어떻게 구현하는 것이 좋을까 ?

 

힌트 활용하기

 

외부에 있는 [UIView] 타입을 넣어야 하는데 따로 설정해둔 것이 없다

튜터님께 가보았다.

[UIButton] 의 타입도 가능하다고 한다.

그 이유를 찾아 보았다.

UIButton은 UIControl을 상속한 타입이다.

 

UIControl 은 뭘까

UIView를 상속한 타입이라고 한다.

UIButton 타입이 결국 UIView로 부터 상속된 타입이기 때문에

[UIButton]도 [UIView] 가 매개변수인 함수에 사용이 가능하다고 한다. - 더 공부 필요 (상속, 다형성 과 관련)

 


configureUI 에서 구현했던 hstackView 관련 설정들을 메서드에 옮겼다.

버티컬 스택뷰를 만들고 그 위에 메서드를 통해 생성되는 버튼을 가진 스택뷰를 올려주는 구성을 통해

굳이 저장속성으로 생성하지 않고 메서드를 활요하면 여러개를 만들 때 더 편리하게 생성할 수 있다.

 

버튼 4개를 배열로 묶어 스택뷰 메서드를 실행시켜 hstackView 에 할당하여

이제 함수를 이용하여 가로 스택뷰를 만들 수 있게 되었다.

 


 

 

버튼을 계속해서 만들어야 하는데 겹치는 부분이 많아

버튼과 관련된 메서드도 만들 수 있을지 않을까 하여 관련된 코드를 서칭하며 구현해 보았다.

 

 

스택뷰를 생성해주는 메서드 처럼 버튼의 이름만 다르기 때문에 버튼 타이틀 배열을 가지고 map을 활용해

스택뷰에 넣어 줄 UIButton 버튼 특성을 설정해준 뒤 배열로 리턴하는 메서드를 구현하였다.

UI 만 구현하는 데에는 저장속성으로 설정한 button1 button2 등등이 없어도 된다는 것을 확인함.
버튼액션을 연결해주기 위해서는 필요함  버튼액션 관련 코드를 메서드 안에 넣어주기만 해도 됨
createButtons 메서드에서 UIButton() 으로 각 숫자와 기호에 맞는 버튼의 객체를 생성해주고 있기 때문
당장 코드가 깔끔해질 수는 있으나 코드정리는 모든 구현이 끝나고 하는 것이 좋겠다. 

 

 

 

버튼 메서드와 스택뷰 메서드를 사용하여 뷰에 추가하는 코드 구현