728x90
반응형
세그를 이용해 데이터를 넘기려다가 네비게이션컨트롤러가 연결된 뷰컨트롤러에 바로 넘기니깐 네비게이션 바가 생략되면서 화면이 전환되었다. 아래처럼
해결방법은 네비게이션컨트롤러에 세그를 걸어준 뒤 네비게이션 컨트롤러와 연결된 뷰컨트롤러에 데이터를 전달하는 방법이었다.
아래처럼 세그를 네비게이션 컨트롤러에 연결해주고 identifier를 정해준다.
그리고 값을 보낼 컨트롤러에서 override func prepare를 통해 현재 뷰컨트롤러의 텍스트필드 값을 네비게이션의 text 변수에 보내주고 버튼을 눌렀을 때 performSegue가 되게 한다. withIdentifier엔 아까 정해놓은 것을 넣어주면 된다.
import UIKit
class GoViewController: UIViewController {
@IBOutlet weak var tf: UITextField!
@IBOutlet weak var gobtn: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let nav = segue.destination as! Navigation
nav.text = self.tf.text ?? ""
}
@IBAction func gobtn(_ sender: Any) {
self.performSegue(withIdentifier: "show", sender: nil)
}
}
이렇게 되면 var text엔 전 GoViewController에서 보낸 텍스트필드 값이 들어있다. 이걸 현재 네비게이션에 연결된 뷰컨트롤러의 receive라는 변수에 보내준다.
import UIKit
class Navigation: UINavigationController {
var text = String()
override func viewDidLoad() {
super.viewDidLoad()
if let rootViewController = viewControllers.first as? RootViewController {
rootViewController.receive = self.text
}
// Do any additional setup after loading the view.
}
이렇게 receive에 값을 받고 현재 label값을 receive로 설정해주면 된다!
import UIKit
class RootViewController: UIViewController {
var receive = String()
@IBOutlet weak var lbl: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.lbl.text = receive
}
}
이렇게하면 네비게이션의 타이틀이나 아이템들을 모두 가진 채 화면을 띄울 수 있다!!
728x90
반응형
'🍎 iOS > UI' 카테고리의 다른 글
[iOS] link url로 이동하기 (0) | 2020.01.15 |
---|---|
[iOS/UI] 폰트 적용하기(feat.네비게이션타이틀) (0) | 2020.01.13 |
[iOS/UI] 텍스트필드 안에 이미지 넣기 및 여백주기(UIImage in UITextField and Padding) (0) | 2020.01.10 |
커스텀 이미지픽커 및 멀티픽(Custom ImagePicker and MultiPick) (0) | 2020.01.09 |
[iOS/UI] 네비게이션 바 아이템 특정부분 색 다르게 하기 (0) | 2020.01.07 |
댓글