🔘 UIButton
- UIContol클래스를 상속받는 사용자와의 상호작용을 통해 정해놓은 코드를 실행하는 control이다.
(실제로 공식문서에는 A control that~~으로 정의함)
- UIButton을 인터페이스에 추가했을 때 다음과 같은 순서로 작업하면 된다.
- 버튼을 생성하고 버튼의 타입을 설정한다.
- 버튼의 title로 문자열 또는 이미지를 지정하고, 사이즈를 적절하게 조절한다.
- action 메서드를 지정한다.(한 개 또는 그 이상)
- 레이아웃을 잡는다.
- 접근성 정보(accessibility)와 localized string을 제공한다.(이부분이 이해되지 않음)
- Respond to Button Taps
UIButton은 터치될 때 애플리케이션에 그 사실을 알리고, 직접 touch이벤트를 다루는것이 아니라, 연결된 액션메서드를 지정해놓고, 이벤트 발생시 액션메서드 발생을 트리거 할 수 있다.
addTarget(_: action: for: )메서드를 사용하거나, @IBAction을 통해 인터페이스빌드에서 연결할 수 있다.
당연히 보통의 경우 @IBAction을 많이 사용할 것 같다.
다음 중 한 방식을 선택하여 필요에따라 사용하면 된다.
@IBAction func doSomething()
@IBAction func doSomething(sender: UIButton)
@IBAction func doSomething(sender: UIButton, forEvent event: UIEvent)
- Configure a Button’s Appearance
처음 생성시 init(type: )생성자를 통해서 또는, 스토리보드를 통해 지정해줄 수 있다. 다만, 한번 생성된 버튼에 대해 type을 변경할 수는 없다.
가장 흔히 사용되는 버튼 타입은 Custom과 System 타입니다.
- Button States
버튼은 다음의 다섯가지 상태를 가질 수 있다. : default, highlighted, focused, selected, disabled
사용자와의 interactions을 통해 버튼의 상태를 변화시킬 수 있으며, 상태는 조합된 상태를 가질 수 있다.
(예시 : dafault + highlighted, selected + disabled)
기본으로 default state를 가지며, 프로그래밍 방식 또는 인터페이스 빌더를 이용해서 각 상태에 대한 속성을 지정할 수 있다.
각 상태의 속성을 따로 지정하지 않으면, UIButton class에서 제공하는 기본 동작을 가지게 된다.
- Button의 주요 프로퍼티와 메서드 (이 내용은 실제로 definition을 보는것이 좋을 듯!)
enum UIButtonType
var titleLabel:UILabel?
var imageView: UIImageView?
var tintColor: UIColor!
//...
func setTitle(String?, for: UIControlState)
//특정 상태의 타이틀 변경
func title(for: UIControlState) -> String?
//특정 상태의 타이틀 반환
//... 직접 보자...
🔖 UILabel
- UIView 클래스를 상속받는 한 줄 또는 그 이상의 줄을 나타낼 수 있는 View
주로 UIButton과 같은 Control의 목적을 설명해주기 위해 많이 사용한다고 한다.
- 다음과 같은 순서로 Label을 추가한다.
- 문자열(String)또는 컨텐츠를 대표하는 특성문자열(Attributed string)을 제공한다.
- non-attributed string을 사용한다면, appearance를 지정한다.
- 레이아웃을 잡는다.
- 접근성 정보(accessibility)와 localized string을 제공한다.
- Label의 주요 프로퍼티
var text: String?
var attributedText: NSAttributedString?
// text나 attributedText에 값을 할당하면, 서로의 것에 같은 값을 할당하게 된다.
// text는 문자열이 모드 동일한 폰트, 색상 등의 속성을 가지고
// atributedText는 문자열 중 특정 부분의 속성을 변경할 수 있다.
var textColor: UIColor!
var font: UIFont!
var TextAlignment: NSTextAlignment //left, right, center, justified, natural
var numberOfLines: Int // 문자를 나타내는 최대 라인 수
// 필요한 만큼의 행을 모두 보여주려면 0
// 최대 라인수를 넘는다면 lineBreakMode 속성에 맞게끔 잘라서 표현
// adjustsFontSizeToFitWIdth 프로퍼티를 사용하면 폰트 사이즈를 레이블의 넓이에 따라 자동으로 조절
var baselineAdjustment: UIBaselineAdjustment // 문자열이 Autoshringk되었을 때의 수직정렬
// Align Baseline: 문자가 작아졌을 때 기존 문자열의 기준선에 맞춤
// Align Center: 문자가 작아졌을 때 작아진 문자의 중앙선에 맞춤
// None: 문자가 작아졌을 때 기존 문자열의 위쪽 선에 맞춤
var lineBreakMode: NSLineBreakMode
// 레이블의 경계선을 벗어나는 문자열에 대응하는 방식
// Character wrap: 여러 줄 레이블에 주로 적용, 글자 단위로 줄 바꿈을 결정
// Word Wrap: 여러 줄 레이블에 주로 적용, 단어 단위로 줄 바꿈을 결정
// Truncate head: 한 줄 레이블에 주로 적용, 앞쪽 텍스트를 자르고 ...으로 표시
// Truncate middle: 한 줄 레이블에 주로 적용, 중간 텍스트를 자르고 ...으로 표시
// Truncate tail : 한 줄 레이블에 주로 적용, 뒷쪽 텍스트를 자르고 ...으로 표시 (기본설정!)
📊 UISlider
- 연속 범위의 값들 중 한 값을 선택할때 사용하는 Control
슬라이더의 thumb를 이동하면, 그에따라 업데이트 된 값을 슬라이더에 연결된 Action메서드에 전달한다.
기본적으로 thumb를 이동할 때 마다 action 메서드를 호출하며 값을 전달하지만, isContinuous 프로퍼티를 통해, 손을 뗄 때의 final value만 전달하고, 호출하도록 설정할 수 있다.
- 다음과 같은 순서로 Slider를 추가한다.
- 슬라이더의 값의 범위를 지정한다.
- 선택적으로, 모양을 꾸민다.
- 하나 또는 그 이상의 액션 메서드를 연결한다.
- 레이아웃을 잡는다.
- UIButton과 유사하게 다음과 같은 방식으로 액션메서드와 연결할 수 있다.
addTarget(_: action: for: )메서드를 사용하거나, @IBAction을 통해
- 슬라이더와 연결하는 메서드의 형식
@IBAction func doSomething()
@IBAction func doSomething(sender: UISlider)
@IBAction func doSomething(sender: UISlider, forEvent event: UIEvent)
- UISlider의 주요 프로퍼티와 메서드
var minimumValue: Float
var maximumValue: Float
var isContinuous: Bool
var minimumValueImage: UIImage?
var maximumValueImage: UIImage?
var thumbTintCOlor: UIColor?
var minimumTrackTintColor: UIColor?
var maximumTrackTintColor: UIColor?
func setMinimumTrackImage(UIImage?, for: UIControlState)
func maximumTrackImage(for: UIControlState) -> UIImage?
// 메서드를 보니 ControlState가 슬라이더에도 있네..? 사용할때 참고해야겠다!
🍎 참고 문서
'공부 > [iOS&Swift]' 카테고리의 다른 글
[iOS] AutoLayout을 코드로 작성하는 기본적인 방법에 대하여 (0) | 2022.01.26 |
---|---|
[Swift] Protocol에 대하여 (0) | 2022.01.24 |
[iOS] Catalog Asset(카탈로그 에셋)에 대하여 (0) | 2022.01.19 |
[iOS] LLDB(Low-Level-Debugger)에 대하여 (0) | 2022.01.18 |
[Swift] Extension(확장)에 대하여 (0) | 2022.01.17 |
댓글