2016-03-25 20 views
7

Ben bir hikaye tahtası olmadan bir uygulama var, tüm UI oluşturma kodu yapılır ve ben iPhone için kullanılabilir hale getirmek bir splitView var, çünkü uygulama sadece iPad için tasarlanmış olduğu için, bu yüzden Ana görünümde listede bir satır seçtiğinizde iPhone'da hiçbir şey yapmaz ancak iPad'de iyi çalışıyordur.Oluşturmak ve storyboard olmadan segue gerçekleştirmek

Sorularım, didSelectRowAtIndexPath yönteminde Ayrıntı Görünümünü göstermeye izin veren bir segue oluşturabilir ve gerçekleştirebilir miyim?

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let segue = UIStoryboardSegue(identifier: "test", source: self, destination: detailViewController!) 
     performSegueWithIdentifier("test", sender: self) 
    } 

ancak çalışan ve uygulama anlatıyorum çökmesini bir satır seçerken ben bu ilave yüzden performhandler gerekli:: şimdi

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let segue = UIStoryboardSegue(identifier: "test", source: self, destination: detailViewController!, performHandler: {() -> Void in 
       let object = self.fetchedResultsController.objectAtIndexPath(indexPath) 
       let controller = self.detailViewController! 
       controller.detailItem = object 
       controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() 
       controller.navigationItem.leftItemsSupplementBackButton = true 


     }) 
     performSegueWithIdentifier("test", sender: self) 
    } 

ve burada

i şimdiye kadar yaptığın şey Bir satır xcode seçerken böyle bir tanımlayıcı "test" ile herhangi bir segue olmadığını söylüyor.

Ben de segue.perform() tarafından diyoruz ve prepareForSegueMethod içine performHandler içerik eklemek çalıştı:

if segue.identifier == "test" { 
      if let indexPath = self.tableView.indexPathForSelectedRow { 
       let object = self.fetchedResultsController.objectAtIndexPath(indexPath) 
       let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController 
       controller.detailItem = object 
       controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() 
       controller.navigationItem.leftItemsSupplementBackButton = true 
      } 
     } 

ve sadece ben Seçili satırı vurgulayın düşmezse, sadece hiçbir şey yapmaz ve hepsi

var

Bana yardım edebilir misiniz?

DÜZENLEME: Oleg Gordiichuk söylediği gibi, bu, ben görsel senaryoları olmadan yapmak istediğini yapmak mümkün değildir bu yüzden onun yardımıyla :) buna anlamak mümkündür film şeridi etkileşimin bileşenidir Segue

cevap

7

için teşekkürler UIStoryboardSegue sınıfından. Programatik olarak segues yaratmak kötü bir fikirdir. Eğer hata yapmıyorum eğer storyboard sizin için onları oluşturur.

Sorununuzun çözümü için, ViewController ürününü kullanıma sunmanın bazı yaygın yollarını kullanmaya çalışın.

let vc = self.storyboard?.instantiateViewControllerWithIdentifier("id") as! MyController 
self.presentViewController(vc, animated: true, completion: nil) 

Görüşmelerde yaptığımız görüşmeden anladığım gibi. Hikaye panosunu kullanmadan segues kullanarak ayrıntıları görmek için tablo görünümünde gezinme oluşturmak istersiniz. Şimdilik bunu storyboard olmadan yapmak imkansız.

Gelecekte öğrenmek için bu information numaralı telefonu araştırmayı deneyin.

+0

Teşekkür didSelectRow yöntemi kullanmak, ben pushViewController ile çalıştı ve bu görünümü değiştirme ve iPhone'lar 6 sorunlara neden oldu Manzara modundayken Plus ve 6S Plus. Çözümünüz benim için çalışmaz, çünkü herhangi bir storyboard'um yok, bu yüzden self.storyboard her zaman nil değerini döndürür, ancak splitView içindeki iki kontrolörün AppDelegate dosyasına referanslarını aldım ve hala çalışmıyor "uygulama denendi aktif bir kontrol cihazını kullanıma sunmak " – EddyW

+0

Görüntüleme denetleyicilerini üzerinde göstermek için gezinme denetleyicisini kullanın. –

+0

aşağıdakilerle çalıştı: let navC = UINavigationController (rootViewController: shared.mediaListController) kendiliğinden.presentViewController (navC, canlandırılmış: true, completion: nil) Ve işe yarıyor ama neye benzediğimi değil ^^ 'sadece detay görünümü iPhone'larda ana/ayrıntı görünümündeki xcode örneğinde olduğu gibi göstermek istiyorum – EddyW

0

bir yolu Cevabınız için tableView

Swift 3.x için

// MARK: - Navigation & Pass Data 
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    print("Selected Row \(indexPath.row)") 
    let nextVC = YourNextViewController() 
    nextVC.YourLabel.text = "Passed Text" 
    nextVC.YourLabel.text = YourArray[indexPath.row] 

    // Push to next view 
    navigationController?.pushViewController(nextVC, animated: true) 
}