2011-03-29 9 views
8

Ben SDK belgeleri otomatik popover görevden popover içeriğinin dışında, dışardan bastığında popover'in işten atılmasının bir yolu yok mu?

Taps diyor biliyorum.

Ama eminim ki buradaki akıllı insanlar bir yol bulmuşlardır :) Belki de devredışı bırakma işlevinin üzerine yazmalıyım?

Teşekkür

DÜZENLEME: burada önerildi gibi passthroughViews kullanarak denedim ve mükemmel çalışıyor. İşte ona ihtiyaç duyanlar için kod - bu örnekte, diziye kendim görüşümü koydum, yani, popoverin nereden kaynaklandığı düğmenin dışında hiçbir şey popülasyonu reddetmiyor.

 popoverController.passthroughViews = [[[NSArray alloc] initWithObjects:self.view, nil] autorelease]; 

cevap

11

Sen passthroughViews özelliğini ayarlamak gerekir. Belge:

Kullanıcının popover görünürken etkileşim kurabileceği görünümlerin bir dizi. popover etkinken popover görevden kadar

@property (nonatomic, copy) NSArray *passthroughViews

, diğer görünümler olan etkileşimleri normal devre dışı bırakılır. Bu özelliğe bir dizi görünüm atamak, popülasyonun dışındaki muslukların ilgili görünümler tarafından ele alınmasını sağlar.

Eğer dokunmatik olayını işlemek yerine sadece popover görevden istediğiniz görünüme (ler) in bir diziye ayarlayın passthroughViews.

+0

Teşekkürler! Hemen deneyeceğim. Utanıyorum, kodda kendimi bulamadım, ama bu yüzden stackoverflow'a sahibiz, değil mi?:) Bu görünümlerin nasıl ayarlanacağıyla ilgili örnek/referans var mı? –

6

Kabul edilen cevap, "dışardan bastığında popover işten atılmasının bir yolu yok mu?" Sorusuna gerçekten cevap vermiyor, imo. O, olası bir görüş vermekte, ancak tüm ebeveyn görüşlerine hack erişimini ve ekranda hangi görünümlerin bulunduğunu belirleyebilmeyi gerektirebilir. Soru, "Bir popover görünüm modelini nasıl yapabilirim?" Şeklinde yeniden yorumlanabilir.

Sen popover kapatmak için bitmiş bir düğme ile, şöyle yapardı:

UIViewController* vc = [[[UIViewController alloc] init] autorelease]; 

UIBarButtonItem* doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done"] style:UIBarButtonItemStyleDone target:self action:@selector(processDoneAction)] autorelease]; 

[vc.navigationItem setLeftBarButtonItem:doneButton]; 

vc.modalInPopover = YES; 
//If you want full screen: 
vc.modalPresentationStyle = UIModalPresentationFullScreen; 
vc.wantsFullScreenLayout = YES; 

UINavigationController* navC = [[[UINavigationController alloc] initWithRootViewController:vc] autorelease]; 

UIView* view = create your view 

vc.view = view; 

UIPopoverController* pc = [[[UIPopoverController alloc] initWithContentViewController:navC] autorelease]; 
pc.delegate = self; 
self.popoverController = pc; 

Sonra processDoneAction yönteminde sen popover görevden gerekecektir olacak

. Diğer hususlar cihaz yönlendirmesi değişikliklerini reddediyor ve yeniden gösteriliyordu, ancak bunu daha önce stackoverflow üzerinde yanıtlanmış olan başka bir alıştırmaya bırakacağım.

7

Çok basit ve okunaklı bir çözüm var. UIPopoverController'u gösteren görünüm denetleyicisinde, UIPopoverControllerDelegate protokolüne uygun ve aşağıdaki temsilci yöntemini uygulayın. Bunu yeni test ettim ve popover'ın görevden alınmasını engelliyor.

- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController 
{ 
    return NO; 
} 

Sadece bu uygulayan görünüm denetleyicisi için popover kumandanın temsilci belirledik emin olun.

[popoverController dismissPopoverAnimated:NO]; yöntemini kullanarak popover'ı kapatabilirsiniz.