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() 으로 각 숫자와 기호에 맞는 버튼의 객체를 생성해주고 있기 때문
당장 코드가 깔끔해질 수는 있으나 코드정리는 모든 구현이 끝나고 하는 것이 좋겠다.
버튼 메서드와 스택뷰 메서드를 사용하여 뷰에 추가하는 코드 구현