2010-05-03 23 views
43

Genellikle projelerimi IB-stuff olmadan oluşturuyorum. Yapmam gereken ilk şey, tüm baytları, çıkışları güncellenmiş plist vb. Sorun yok, harika çalışıyor (dünyamda)!UISplitViewController nib/xib olmadan program aracılığıyla

Şimdi, 3.2 sürümünü kurdum ve ilk iPad uygulamasını geliştirmeye çalıştım. Daha önce olduğu gibi aynı prosedürü uygulayarak UISplitView tabanlı bir uygulama projesi oluşturdum ve tüm IB-materyallerini çıkardım. Ayrıca, Apple'ın referans dokümanlar bölümündeki bölümü takip ettim: Creating a Split View Controller Programmatically, ancak yine de, Master-view asla gösterilmiyor, sadece Detay görünümü (yönelim ne olursa olsun). Bunu dikkatlice incelemeye çalıştım ama neyi özlediğimi anlayamıyorum.

UISplitViewController'ın bir ucunun etrafında yüzen uçları olmadan çalışan bir örneği var mı? Ben googled ama hiç bulamadım. Ya da muhtemelen neyi özlediğimi biliyor musun?

+8

"Genellikle projelerimi IB-stuff olmadan oluşturuyorum." Bunun için <- +1. Programlamanın işleyiş şekli bu, ben de yaparım. Harikasın! –

cevap

55

, sizin temsilci başlığında splitviewcontroller beyan

Eğer detailedViewController başlık dosyasına UISplitViewControllerDelegate ekleyin ve lutfen temsilci yöntemleri sahip olmasını sağlamak için didfinishlaunching böyle bir şey kullanın. İlgili başlık dosyaları

içe aktarmayı unutmayın
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  

    splitViewController = [[UISplitViewController alloc] init]; 

    rootViewController *root = [[rootViewController alloc] init]; 
    detailedViewController *detail = [[detailedViewController alloc] init]; 

    UINavigationController *rootNav = [[UINavigationController alloc] initWithRootViewController:root]; 

    UINavigationController *detailNav = [[UINavigationController alloc] initWithRootViewController:detail]; 

    splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, detailNav, nil]; 
    splitViewController.delegate = detail; 

    [window addSubview:splitViewController.view]; 

DÜZENLEME - Aşağıda Scott'un mükemmel öneri gereğince, IB ;-)

yerine

[self.window setRootViewController:(UIViewController*)splitViewController]; // that's the ticket 
    [window makeKeyAndVisible]; 
    return YES; 
} 


//detailedView delegate methods 
- (void)splitViewController:(UISplitViewController*)svc 
    willHideViewController:(UIViewController *)aViewController 
      withBarButtonItem:(UIBarButtonItem*)barButtonItem 
     forPopoverController:(UIPopoverController*)pc 
{ 
    [barButtonItem setTitle:@"your title"]; 



    self.navigationItem.leftBarButtonItem = barButtonItem; 
} 


- (void)splitViewController:(UISplitViewController*)svc 
    willShowViewController:(UIViewController *)aViewController 
    invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem 
{ 
    self.navigationItem.leftBarButtonItem = nil; 
} 

Ben de tercih pencere subview için kod katmayan

+5

Bu cevap tam olarak aradığım şey. Bir soru: Apple'ın referans örnek kodunda (http://developer.apple.com/library/ios/ipad/#samplecode/MultipleDetailViews/Listings/Classes_RootViewController_m.html), UiSplitviewcontroller temsilcisini kök görüntüleme denetleyicisinde ele alırlar. Bunun yerine ayrıntılı denetleyicide ele alırsınız. Bir yolun ya da diğerinin bir sebebi var mı? –

+0

Temsilci olan denetleyici size kalmış. Eğer 'detailViewController'' ın * komutunu * 'rootViewController'' e tamamıyla tamamladığını hissediyorsanız :). Bu durumda, muhtemelen sizin değişkenlerinizi tasarımınıza uyan bir şeye yeniden adlandırmak isteyebilirsiniz (örn., 'ListViewController' ve 'mainViewController' için' rootViewController' ve 'DetailedViewController' için sırasıyla) – nacho4d

22

Oldish thread, ancak yukarıdaki teknik, cihaz yönelim değişikliği olaylarına doğru olarak yanıt veren bir UISplitViewController üretemediğinde okuyucu zamanını + keder alacağımı düşündüm.

  1. bütün ast görünümleri shouldAutorotateToInterfaceOrientation düzgün cevap emin olun: Sen gerekir. Burada yeni bir şey yok. Bir subview splitviewcontroller görüşünü ekleme

    [self.window setRootViewController:(UIViewController*)splitViewController]; // that's the ticket 
    

: ana pencereye UISplitViewController görüşünü eklemek yerine

  • ,

    [window addSubview:splitViewController.view]; // don't do this 
    

    yerine UISplitViewController ana pencerenin kök kontrolörü set Ana pencerenin (zar zor) kardeşi bakışı ile birlikte sunmasına izin verir, ancak UISplitViewController'ın amaçlanan kullanım durumu ile uçmaz. Bir UISplitViewController bir highlander görünümüdür; sadece bir tane olabilir.

  • 3

    Aynı sorunu daha yeni tanışmıştım. Çocuk görüşünüzün splitviewController yönünü oryantasyona Autorotate olduğundan emin olun.

    böyle senin childViewController işlevini değiştirebilirsiniz:

    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
        return YES; 
    } 
    

    sonra ana görünümü gösterilir.

    +1

    Seni seviyorum! Benim problemim çözüldü! – mineschan

    İlgili konular