簡體   English   中英

從顯示的屏幕顯示導航控制器內的 ViewController:ios,swift

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM