본문 바로가기
iOS/Swift

Swift) UIAlertController ActionSheet Programmatically

by Jiseong 2022. 2. 20.

UIAlertController ActionSheet Programmatically

초간단하므로 바로 드가보자 

 

아 먼저 액션시트가 뭔지부터 볼까..

 

액션시트는 alert의 스타일 중 하나인데, 알림뜰 때 팝업의 스타일 중 하나라고 생각하면 된다.

요거 많이 보셨죠?

 

스토리보드로 하든 코드로 하든 얼럿을 띄우는 것은 간단하다.

 

먼저 나는 특정 버튼을 누르면 얼럿이 나오도록 예를 들어볼 것이다.

private func configButton() {
	let button = UIButton()
	button.backgroundColor = .gray
	button.setTitle("button", for: .normal)
	    
	self.view.addSubview(button)
	button.translatesAutoresizingMaskIntoConstraints = false
	    
	NSLayoutConstraint.activate([
	    button.topAnchor.constraint(equalTo: view.topAnchor, constant: 300),
	    button.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 100),
	    button.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -300),
	    button.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -100)
	])
	button.addTarget(self, action: #selector(showAlert), for: .touchUpInside)
}

코드로 해갖고.. 버튼 레이아웃 잡은 코드가 대부분이다. 

 

먼저 버튼을 생성하고~ 버튼이 눌리면 해야할 동작을 다른 함수로 정의해야겠지

 

동작을 만들고, addTarget부분에 액션 파라미터에 넣어주자. 위 코드는 touchUpInside 이벤트 발생시 해야할 동작을 설정하는 것이다.

 

이제 동작 만들자~~

@objc private func showAlert() {
    let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
    
    let modifyAction = UIAlertAction(title: "수정", style: .default, handler: nil)
    let deleteAction = UIAlertAction(title: "삭제", style: .destructive, handler: nil)
    let cancelAction = UIAlertAction(title: "취소", style: .cancel, handler: nil)
    
    alert.addAction(modifyAction)
    alert.addAction(deleteAction)
    alert.addAction(cancelAction)

    self.present(alert, animated: true, completion: nil)
}

Selector내부에 들어갈 함수는 @objc 메서드여야 한다.

얼럿을 만든 쪽을 보면 스타일을 actionSheet로 지정했다. 이게 끝임 스타일 지정

 

그리고 밑의 코드는 이제 얼럿을 띄우고 어떤 동작을 할지 고를 수 있게 액션을 추가해준 것이다.

 

그러고나서~ 얼럿을 present 한것임

 

UIAlertAction에도 스타일이 있는게 보이는데 잠깐 해당 스타일을 알아보자

 

아까 위 사진을 고대로 들고오면..

아시겠죠?

참고로 destructive 같은 경우 타이틀이 뻘건색인데, 저거 제가 지정한거 아니고 destructive 자체 스타일

 

끝이다.

 

아 중요한 것 하나만 더...

HIG에 명시된 것인데 cancel 스타일 버튼은 액션시트의 마지막!!에 와야 한단다.

 

그리고.. 하나 더

 

Alert에 액션을 추가할 때 추가되는 액션들 중 Cancel 액션은 단 하나여야만 한다.

 

안그럼 어떻게되는지 보여줌

 

우선 추가한 코드 (캔슬 2개)

@objc private func showAlert() {
    let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
    
    let modifyAction = UIAlertAction(title: "수정", style: .default, handler: nil)
    let deleteAction = UIAlertAction(title: "삭제", style: .destructive, handler: nil)
    let cancelAction = UIAlertAction(title: "취소", style: .cancel, handler: nil)
    let cancelAction2 = UIAlertAction(title: "취소", style: .cancel, handler: nil) // 요기
    
    alert.addAction(modifyAction)
    alert.addAction(deleteAction)
    alert.addAction(cancelAction)
    alert.addAction(cancelAction2) // 요기
    
    self.present(alert, animated: true, completion: nil)
}

컴파일시엔 문제없다 런타임에 얼럿 띄우면 아작이 남

요렇게 아작내면서 알려준다. 

 

캔슬 액션 하나만 쓰란다.

 

간단하다~~

 

끝~~

'iOS > Swift' 카테고리의 다른 글

Swift) hitTest  (0) 2022.02.20
Swift) CoreData  (0) 2022.02.20
Swift Performance (Allocation)  (0) 2022.02.20
Swift) final  (0) 2022.02.20
Swift) Frame vs Bounds  (0) 2022.02.20

댓글