![](/img/trans.png)
[英]iOS - Present viewcontroller from another presented viewcontroller
[英]showing ViewController inside navigationController from a presented screen : ios, swift
所以我有一個個人資料頁面,在rightBarButtonItem我有一個菜單選項。 當我單擊該菜單時,下一個 viewController 將顯示為半屏表單。 使用代碼。
let nextVc = storyboard.instantiateViewController(withIdentifier: "MenuSheetStoryboard") as! MenuSheetController
if let sheet = nextVc.sheetPresentationController {
sheet.detents = [.medium ()]
}
self.present(nextVc, animated: true)
菜單表包含一個帶有菜單項的表格視圖。 其中之一是編輯個人資料。 因此,當我單擊該選項時,我想轉到 EditProfileViewController,它顯示后退按鈕並具有彈出當前 Vc 的選項,因為 NavigationviewControllers 內的 ViewControllers 上有。
我正在使用從 menuVc 到 EditProfileVc 的代碼
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "EditProfileStoryboard") as! EditProfile
self.present(nextViewController, animated: true)
現在的問題是。 要么我將它呈現為一張表,以便用戶可以向下滑動它(我不想要它,而且還有一個保存按鈕,通過單擊用戶可以自動返回上一個屏幕,就像 popViewController 所做的那樣)或全屏,在這種情況下,無法從此處返回上一個屏幕。
Q1。
在呈現任何視圖控制器時,您可以使用modalPresentationStyle
屬性告訴您的視圖控制器它應該如何在當前上下文中顯示
參考可用UIModalPresentationStyle
public enum UIModalPresentationStyle : Int, @unchecked Sendable {
case fullScreen = 0
case pageSheet = 1
case formSheet = 2
case currentContext = 3
case custom = 4
case overFullScreen = 5
case overCurrentContext = 6
case popover = 7
case none = -1
case automatic = -2
}
Q2。
因此,在呈現 ViewController 時使用UINavigationController
前任:-
func onEditProfileTapped(_ sender: Any) {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
if let profileVC = storyBoard.instantiateViewController(withIdentifier: "EditProfileStoryboard") as? EditProfileStoryboard {
let nav = UINavigationController(rootViewController: profileVC)
nav.modalPresentationStyle = .currentContext
self.present(nav, animated: true)
}
}
現在您可以在EditProfileStoryboard
屏幕中添加Done
按鈕,如下所示
class EditProfileStoryboard: UIViewController {
override func viewDidLoad() {
let doneButton = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(onDoneButtonTapped(_:)))
self.navigationItem.leftBarButtonItems = [doneButton]
}
@objc func onDoneButtonTapped(_ sender: UIBarButtonItem) {
self.dismiss(animated: true)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.