기록/공부기록👩🏻‍💻

[공부기록]100일_6일차

lingk 2020. 9. 12. 21:18

1. 모달 presentation 바꾸기

PlusBucketVC를 Full Screen으로 띄워야 viewWillAppear을 거쳐 테이블뷰를 reload할 수 있었다.

Full Screen이 아닌 iOS 13의 기본 page sheet형태로 모달을 띄웠을 때도 테이블뷰를 reload할 수 있도록 수정하였다.

 

우선 PlusBucketVC에서 Notification의 식별자를 선언해주었다.

extension PlusBucketViewController{
    static let newBucketInsert=Notification.Name(rawValue: "newBucketInsert")
}

save함수에서 post로 노티피케이션센터에 발송!

NotificationCenter.default.post(name: PlusBucketViewController.newBucketInsert, object: nil)

FirstVC의 토큰을 선언하고, 소멸자도 정의!

var token : NSObjectProtocol? = nil
    
  
deinit{
    if let token = token{
        NotificationCenter.default.removeObserver(token)
    }
}

viewDidLoad에서 addObserver로 수신하고, 메인스레드에서 진행될 수 있도록 OperationQueue의 main에 태웠다!!!!

token = NotificationCenter.default.addObserver(forName: PlusBucketViewController.newBucketInsert, object: nil, queue: OperationQueue.main){ [weak self] (noti) in
            self?.tableView.reloadData()
        }

 

 

lin-ing-link.tistory.com/28

 

[iOS]노티피케이션센터와 노티피케이션

Notification 노티피케이션을 통해 등록된 노티피케이션에 정보를 전달하기 위한 구조체 Notification Center 등록된 옵저버에게 동시에 노티피케이션을 전달하는 클래스 NotificationCenter 클래스는 노티��

lin-ing-link.tistory.com

2. 팝업 모달로 바꾸기

이전처럼 뷰컨트롤러를 사용하여 전체화면을 쓰는 것이 아니라

Alert로 바꿔볼 것이다!

FirstVC안에서 버튼을 연결하여 action 메소드로 alert을 생성해 주었다.

 

@IBAction func plusModal(_ sender: Any) {
    //alert생성
    let alert = UIAlertController(title: "올해의 버킷리스트", message: "Message", preferredStyle: .alert)
    //textField생성
    alert.addTextField{(textField) in
        textField.placeholder = "Input"
        textField.textAlignment = .center
    }
    //ok버튼을 눌렀을때 액션
    let okAction = UIAlertAction(title: "Ok", style: .default, handler:{
            (okAction) in
        if let bucket = alert.textFields?[0].text{
                   let newBucket=TYBucket(content: bucket,iDidIt:false )
                   TYBucket.dummyTYB.insert(newBucket, at: 0)
                   print(TYBucket.dummyTYB)
               }else{
                   print("fault")
               }              
               //notification 라디오 주파수 맞추는 느낌????
               NotificationCenter.default.post(name: PlusBucketViewController.newBucketInsert, object: nil)
    })
    alert.addAction(okAction)
    
    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
    alert.addAction(cancelAction)
    
    self.present(alert, animated: true, completion: nil)
    
    }

위에서 노티피케이션을 통해 데이터를 전달하고 테이블뷰 reloadData과정을 수정했었기 때문에

헤매지않고 바꿀 수 있었다!!!!! 뿌--듯.

 

 

반응형

'기록 > 공부기록👩🏻‍💻' 카테고리의 다른 글

[공부기록]100일_8일차  (0) 2020.09.14
[공부기록]100일_7일차  (0) 2020.09.13
[공부기록]100일_5일차  (0) 2020.09.11
[공부기록]100일_4일차  (0) 2020.09.10
[공부기록]100일_3일차  (0) 2020.09.09