【问题标题】:From segues to show/present view controller从 segues 到显示/呈现视图控制器
【发布时间】:2016-12-08 05:00:48
【问题描述】:

我在更改 segue 以显示或呈现 ViewController 时遇到了一些问题。 该代码有效

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let noteDetailViewController = segue.destination as! NoteViewController
    var selectedNote: Note?

    if segue.identifier == "ShowDetail" {
        if let selectedNoteCell = sender as? NoteTableViewCell {
            let indexPath = tableView.indexPath(for: selectedNoteCell)!
            selectedIndexPath = indexPath
            if !searchIsEmpty() {
                selectedNote = filteredNotes[indexPath.row]
            } else {
                selectedNote = notes[indexPath.row]
            }
        }
    } else if segue.identifier == "RemindLater" {
        if let note = notificationNote?.copy() as? Note {
            selectedNote = note
        }
    }
    noteDetailViewController.note = selectedNote?.copy() as? Note
    noteDetailViewController.oldNote = selectedNote?.copy() as? Note
    noteDetailViewController.isFiltered = isFiltered
    resultSearchController.searchBar.isHidden = true
}

它被调用

vc.performSegue(withIdentifier: "RemindLater", sender: self)

我尝试做一个具有相同目的的函数,但使用 show/present 方法。 看起来是这样的

func remindLater() {
    if let note = notificationNote?.copy() as? Note {
        noteToEditing = note
        noteViewController.transitioningDelegate = self
        noteViewController.modalPresentationStyle = UIModalPresentationStyle.fullScreen
        noteViewController.modalTransitionStyle = UIModalTransitionStyle.coverVertical
        noteViewController.note = noteToEditing?.copy() as? Note
        noteViewController.oldNote = noteToEditing?.copy() as? Note
        noteViewController.isFiltered = isFiltered
        resultSearchController.searchBar.isHidden = true
        present(noteViewController, animated: true, completion: nil)
        //show(noteViewController, sender: self)
    }
}

但它不起作用。当我在 viewDidLoad 方法中在视图控制器上设置我的对象(在调用提醒Later 方法之后)时,我发现所有对象,如 UIDatePicked 和其他等于 nil。使用 segue 不是这样的。我做错了什么?

【问题讨论】:

    标签: ios swift3 segue


    【解决方案1】:

    据我所知,您正在尝试做什么,听起来您需要通过实例化它然后设置属性来获取对准备中控制器的引用(对于 segue:UIStoryboardSegue,发件人:Any?)直接。

    我可能不在基地,但我说的是:

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    
        if "RemindLater" == segue.identifier {
    
            let controller = segue.destination as! NewViewController
            controller.note = noteToEditing
            ...
    
        }
    
    }
    

    【讨论】:

    • 不使用prepare for segue方法有什么办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    相关资源
    最近更新 更多