簡體   English   中英

如何從動態創建的Storyboard屬性為nil的UIViewController執行SegueWithIdentifier()

[英]How to performSegueWithIdentifier() from dynamically created UIViewController whose storyboard property is nil

我正在一個具有搜索功能的項目。我有3個視圖控制器,即HomeViewController,SearchResultViewController和DetailViewController。

在主頁上,我在NavigationBar中有一個搜索欄(使用UISearchController )以及一些虛擬內容。 這里重要的是,我正在使用單獨的控制器(在我的情況下是SearchResultController)來顯示結果。 這個SearchResultController實際上是TableViewController的子類,它在tableview中顯示結果。 到這里一切都很好。

問題

現在,當我從結果中選擇任何行時(即在SearchResultViewController處),我想打開另一個視圖控制器(DetailViewController),在其中將顯示有關此選定項的詳細信息。 這是很簡單的事情,但是我被困在這里。

好的,繼續我實現了didSelectRowAtIndexPath方法的問題,然后我調用了performSegueWithIdentifier,並且由於storyboard屬性為nil(在文檔中有提到),我收到了錯誤“ Receiver has no segue with identifier ”。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print("storyboard property is \(self.storyboard)")
        performSegueWithIdentifier(segueIdentifier, sender: indexPath.row)
    }

注意: segueIdentifier與情節提要上的相同。 我得到的故事板屬性為零。

我猜

當我點擊搜索欄時,iOS在內部創建並加載SearchResultController的實例以顯示結果,因此其Storyboard屬性為nil,因此,我遇到了以上錯誤。

有人可以解決這個問題嗎?還是任何指向正確方向的指針。

如果您以編程方式創建viewcontroller,則應按如下所示插入導航控制器,

  UIViewController *vc = [[UIViewController alloc]init]; //your viewcontroller here

[self.navigationController pushViewController:vc animated:YES];

//or if you want to present it then

[self presentViewController:vc animated:YES completion:nil];

您無法執行segue,因為沒有情節提要不會存在segue

這樣的事情很快

 let vc: UIViewController = UIViewController()
    //your viewcontroller here
    self.navigationController!.pushViewController(vc, animated: true)
    //or if you want to present it then
    self.presentViewController(vc, animated: true, completion: { _ in })

快速避免任何錯誤!!!

希望這會有所幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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