Swift TIL(66)-스위프트와 코코아터치파일, 커스텀과 시스템 타입버튼 차이 , 에러해결

웰디(Well-D)·2023년 11월 1일
0

Sweet & Soft, SWIFT

목록 보기
65/76

좋은 네트워킹 이었다! (간단한 소감은 블로그에)

네트워킹을 통해 스그가 근본(?)이라는 것을 배우게 되었다(?)
오늘 알아서 다행 히히

여러화면 만들기

swift파일과 cocoaTouchFile의 차이를 배움
swift파일 : 빈파일
cocoaTouchFile : 적당한 속성등의 옵션이 셋팅된 (도와주는)파일

다음화면을 코드로 만들때

파일을 생성하고 => 내부에 하드코딩으로 구현

커스텀과 시스템 타입 버튼의 차이

그냥 개인적으로 궁금해서 만든 버튼
급조해본 결과로는
커스텀 => 배경 clear, 글자(tint) white
시스템버튼 => 배경 clear, 글자(tint) accentBlue

아니라면 댓글부탁드립니다(!)

직접쓰기가 조금 귀찮았던 내가 참고한 분의 코드
커스텀 제외 다양한 버튼확인하기

class ViewController: UIViewController {
    
    
    //시스템버튼
    lazy var systemButton: UIButton = {
        
        let button = UIButton(type: .system)
        let width: CGFloat = 200
        let height: CGFloat = 50
        // Specify the position of the button.
        let posX: CGFloat = self.view.frame.width/2 - width/2
        let posY: CGFloat = 200
        // Tag a button.
        button.tag = 5
        // Set the button installation coordinates and size.
        button.frame = CGRect(x: posX, y: posY, width: width, height: height)
        // Set the title (normal).
        button.setTitle("systemButton", for: .normal)
        return button
    }()
    
    
    //커스텀버튼
    lazy var customButton: UIButton = {
        
        let button = UIButton(type: .custom)
        button.backgroundColor = #colorLiteral(red: 0.2196078449, green: 0.007843137719, blue: 0.8549019694, alpha: 1)
        let width: CGFloat = 200
        let height: CGFloat = 50
        // Specify the position of the button.
        let posX: CGFloat = self.view.frame.width/2 - width/2
        let posY: CGFloat = 400
        // Tag a button.
        button.tag = 5
        // Set the button installation coordinates and size.
        button.frame = CGRect(x: posX, y: posY, width: width, height: height)
        // Set the title (normal).
        button.setTitle("customButton", for: .normal)
        return button
    }()

    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 버튼올리기
        self.view.addSubview(self.systemButton)
        self.view.addSubview(self.customButton)
        
    }
}

차이

button.backgroundColor 설정없는 custom type 버튼과 system type 버튼

커스텀 버튼은 안보인다

button.backgroundColor 설정있는(대충 블루) custom type 버튼과 system type 버튼

에러해결

문제상황

터미널에러

self NextVC.FirstViewController 0x000000014f516c40

button UIButton 0x000000015779e400

내피셜 해석

⇒ self 에서도 에러가 난걸 봐서는 backButton 이 제대로 생성이 안되었을 가능성 있음

 //class FirstViewController: UIViewController 내부

// 클로저로 버튼 셋업해보기
    lazy var backButton: UIButton = {
        let button = UIButton(type: .custom)
        button.setTitle("Back", for: .normal)
        button.setTitleColor(.white, for: .normal)
        button.backgroundColor = UIColor.blue
        button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 20). // 여기서 쓰레드 에러발생
        button.addTarget(self, action: #selector(backButtonTapped), for: .touchUpInside)
        view.addSubview(backButton)
        return button

    }()

// class ViewController: UIViewController 내부

    @IBAction func codeNextButtonTapped(_ sender: UIButton) {
    
        let firstVC = FirstViewController()
        present(firstVC, animated: true, completion: nil)        
    }

해결법

원래 클로저 버튼생성 실행구문안에 있었던 view.addSubview(backButton) 메서드를
viewDidLoad함수 내에서 실행되는 기본화면 셋팅을 하는 setUP함수내에서 끝내도록 위치변경

override func viewDidLoad() {
        super.viewDidLoad()
        
        setUp()
				// 여기다가 추가하면 appDelegate @main 쪽에서 에러가남 
        
    }
    
    func setUp() {

        view.addSubview(backButton)  // backButton 추가그리는 위치를 setUP함수 내에서 끝냄


       
    }
profile
Wellness 잘사는 것에 진심인 웰디입니다. 여러분의 몸과 마음, 통장의 건강을 수호하고싶어요. 느리더라도, 꾸준히

0개의 댓글