https://github.com/jacobkosmart/ledborad-ios-practice
To Practice UINavigationController, transition, ViewController Life Cycle, send data to different page, asset catalogs
https://github.com/jacobkosmart/ledborad-ios-practice
swift uinavigationcontroller viewcontro
Last synced: 3 months ago
JSON representation
To Practice UINavigationController, transition, ViewController Life Cycle, send data to different page, asset catalogs
- Host: GitHub
- URL: https://github.com/jacobkosmart/ledborad-ios-practice
- Owner: jacobkosmart
- Created: 2021-11-25T09:19:45.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-11-25T09:21:25.000Z (about 4 years ago)
- Last Synced: 2024-12-28T03:27:53.475Z (about 1 year ago)
- Topics: swift, uinavigationcontroller, viewcontro
- Language: Swift
- Homepage:
- Size: 54.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# LED Board

## Check Point !
### StackView
- 여러개의 view 를 set 으로 만들어 주는 역활을 함
- 일정한 규칙에 따라서 stack view 안에 움직이는것임
### 이미지 넣기
- 프로젝트 내에 Assets 폴더 내에 Image Set 을 추가하여 1x, 2x, 3x 의 크기의 맞게 해당 이미지를 넣어 줍니다 (24px, 48px, 72px 사이즈의 이미지를 추가함) -> 다양한 크기의 image 를 추가하는것은 iphone, ipad 등 다양한 해상도에서 이미지가 깨지지 않게 하기 위함임
## 주요 코드

```swift
// viewController.swift
class ViewController: UIViewController, LEDBoardSettingDelegate {
@IBOutlet weak var contentsLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.contentsLabel.textColor = .yellow
}
// delegate 된 data 받기(segueway 를 통해서)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let settingViewController = segue.destination as? SettingViewController {
settingViewController.delegate = self
// setting 페이지에 다시 값 넘겨 주기
settingViewController.ledText = self.contentsLabel.text
settingViewController.textColor = self.contentsLabel.textColor
settingViewController.backgroundColor = self.view.backgroundColor ?? .black // optional 값이면 .black 으로 설정
}
}
// setting 에서 받은 data 로 view 에 초기화 하기
func changedSetting(text: String?, textColor: UIColor, backgroundColor: UIColor) {
if let text = text {
self.contentsLabel.text = text
}
self.contentsLabel.textColor = textColor
self.view.backgroundColor = backgroundColor
}
}
```
```swift
// settingViewController.swift
// delegate pattern : 이전화면에서 설정된 값들을 앞 페이지로 전달하기
protocol LEDBoardSettingDelegate: AnyObject {
func changedSetting(text: String?, textColor: UIColor, backgroundColor: UIColor)
}
class SettingViewController: UIViewController {
// TextFiled 연결
@IBOutlet weak var textField: UITextField!
// Text Colors 연결
@IBOutlet weak var yellowBtn: UIButton!
@IBOutlet weak var purpleBtn: UIButton!
@IBOutlet weak var greenBtn: UIButton!
// Background Colors 연결
@IBOutlet weak var blackBtn: UIButton!
@IBOutlet weak var blueBtn: UIButton!
@IBOutlet weak var orangeBtn: UIButton!
// delegate 변수
weak var delegate: LEDBoardSettingDelegate?
// 저장되고 앞에서 다시 설정할때 앞페이지에서 값을 받을 수 있게 변수 설정
var ledText: String?
// 초기화 값 설정
var textColor: UIColor = .yellow
var backgroundColor: UIColor = .black
override func viewDidLoad() {
super.viewDidLoad()
// led 화면에서 받은값이 페이지 로드 될때 불러오기
self.configureView()
}
// 앞에서 전달 받은 데이터들로 view 를 초기화 하기
private func configureView() {
if let ledText = self.ledText {
self.textField.text = ledText
}
self.changeTextColor(color: self.textColor)
self.changeBackgroundColor(color: self.backgroundColor)
}
@IBAction func tabTextColorBtn(_ sender: UIButton) {
if sender == self.yellowBtn {
self.changeTextColor(color: .yellow)
self.textColor = .yellow
} else if sender == self.purpleBtn {
self.changeTextColor(color: .purple)
self.textColor = .purple
} else {
self.changeTextColor(color: .green)
self.textColor = .green
}
}
@IBAction func tabBackgroundColorBtn(_ sender: UIButton) {
if sender == self.blackBtn {
self.changeBackgroundColor(color: .black)
self.backgroundColor = .black
} else if sender == self.blueBtn {
self.changeBackgroundColor(color: .blue)
self.backgroundColor = .blue
} else {
self.changeBackgroundColor(color: .orange)
self.backgroundColor = .orange
}
}
// 설정 된 delegate 값을 Save 버튼 누르면 보내는 logic
@IBAction func tabSaveButton(_ sender: UIButton) {
self.delegate?.changedSetting(
text: self.textField.text,
textColor: self.textColor,
backgroundColor: self.backgroundColor
)
// 이전화면으로 이동
self.navigationController?.popViewController(animated: true)
}
// 선택된 color는 alpha 값을 1로 하고 선택되지 않은 color 는 alpha 를 0.2로 설정
private func changeTextColor(color: UIColor) {
self.yellowBtn.alpha = color == UIColor.yellow ? 1 : 0.2
self.purpleBtn.alpha = color == UIColor.purple ? 1 : 0.2
self.greenBtn.alpha = color == UIColor.green ? 1 : 0.2
}
private func changeBackgroundColor(color: UIColor) {
self.blackBtn.alpha = color == UIColor.black ? 1 : 0.2
self.blueBtn.alpha = color == UIColor.blue ? 1 : 0.2
self.orangeBtn.alpha = color == UIColor.orange ? 1 : 0.2
}
}
```
## reference
Jacob's DevLog - [https://jacobko.info/ios/ios-03/](https://jacobko.info/ios/ios-03/)
On the swift - [https://ontheswift.tistory.com/8](https://ontheswift.tistory.com/8)
농부와 코드 - [https://tono18.tistory.com/11](https://tono18.tistory.com/11)
fastcampus - [https://fastcampus.co.kr/dev_online_iosappfinal](https://fastcampus.co.kr/dev_online_iosappfinal)