본문 바로가기
🍎 iOS/iOS

[iOS] Notification으로 데이터 보내기(Pass data using Notification)

by Fomagran 💻 2020. 9. 14.
728x90
반응형

안녕하세요 Foma 입니다!!

 

오늘은 Notification으로 데이터 보내기를 알아보겠습니다.

 

평소에 다른 뷰컨트롤러로 데이터를 보낼 때 세그를 이용하거나 아니면 반드시 그 뷰컨트롤러로 이동해야되는 불편함이

 

있었는데 뷰컨트롤러에서 아무런 이동없이 데이터만 보낼 순 없을까?를 고민하다가 구글링한 결과

 

NotificationCenter를 찾을 수 있었습니다.

자 그럼 시작하겠습니다!

 

먼저 데이터를 보낼 뷰컨트롤러 1개와 데이터를 받을 뷰컨트롤러 1개를 만들어줍니다.

 

저는 ViewController와 TabbarViewController1을 만들어주겠습니다.

 

ViewController엔 item버튼을 누르면 데이터가 전송이되고 TabbarViewController1에 받은 데이터를 표시할 Label을 각각 만들어주었습니다.

 

 

ViewController에 item을 눌렀을 때 아래와 같이 NotificationCenter를 만들어주고 .default.post로 보내는 Notification을 만들어주고 name을 NSNotification.Name(원하는이름) object는 nil userInfo에 보낼 데이터를 Dictionary형태로 넣어줍니다.

TabbarViewController1엔 똑같이 NotificationCenter를 만들어주고 .defuault를 하는데 여기선 addObserver로 옵저버를 달아줍니다. 그리곤 self,selector엔 #selector(@objc 함수),name엔 아까 ViewController에서 설정했던 이름을 적어줍니다.

여기서 #selector에 들어갈 파라미터로 NSNotification을 갖는 @objc 함수를 만들어줍니다.

@objc함수안에 받은 데이터 -> notification.userInfo[보낸 데이터에서 설정한 키값]을 넣어주고 name을 그 값으로 바꿔줍니다.

아래와 같이 ViewController에서 버튼을 누르고 TabbarViewController1로 이동하면 보낸 데이터(이름:"Foma")가 잘 적용된것을 볼 수 있습니다.

TabbarViewController1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import UIKit
 
 
class TabbarViewController1: UIViewController {
    
   
    @IBOutlet weak var name: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(test(_:)), name: NSNotification.Name("test"), object: nil)
    }
    
    @objc func test(_ notification:NSNotification){
        name.text = "\(notification.userInfo!["이름"]!)"
    }
    
}

ViewController

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import UIKit
 
class ViewController: UIViewController {
    
    
    @IBOutlet weak var item: UIBarButtonItem!
  
    @IBAction func tapItem(_ sender: Any) {
        
     NotificationCenter.default.post(name: NSNotification.Name("test"), object: nil, userInfo: ["이름":"Foma"])
        
    }
    
}
cs

 

 

 

728x90
반응형

댓글