2012-03-26 6 views
26

Bir popover görevden istiyorsanız -Bir UIPopoverController öğesini contentViewController içinden reddetme?

  1. popover bir başvuru oluşturun,
  2. oluştur oluşturur görünümü denetleyicisi tarafından yapılacak - sen gerekir popover en contentViewController içinde bir düğmeden, örneğin contentViewController bir bildirim aynı amaçla
  3. popover
  4. Çağrı alınmaları için hazır olduğunda bildirim veya temsilci mesaj gönder için temsilci yaratma dönüşümlü onu görevden gerektiğini sahibi olan görünümü denetleyicisi bildirmek veya hiç dismissPopover:animated zaman notifica siyon veya temsilci yöntemi, kalıcı görünümü denetleyicisi, ana görünümü denetleyicisi, navigasyon kontrolörü, split görünümü denetleyicisi, sekme çubuğu denetleyicisi, arama görüntü kontrolörü erişebileceği bir UIViewController itibaren

arada denir çocuk görünümü denetleyicileri, sunum yapan denetleyicileri ve sunulan denetleyicileri.

Bunu, popover'ın contentViewController uygulamasından yapmak için daha iyi bir yaklaşım var mı?

cevap

29

Maalesef, içerik görüntüleme denetleyicisinden erişmenin bir yolu olmadığından, UIPopoverController numaralı telefona zayıf bir özellik referansı oluşturmanız gerekir.

UIViewController'in modal görünüm denetleyicisine, ana görünüm denetleyicisine, gezinme denetleyicisine, bölünmüş görünüm denetleyicisine, sekme çubuğu denetleyicisine, arama ekranı denetleyicisine ve iOS 5, çocuk görünümü denetleyicilerine nasıl erişebileceğine şaşırdım denetleyicilerin sunulması ve sunulmasının yanı sıra ... popover denetleyicisi (verilen pop'lar UIViewController s değil, yine de).

Teknik olarak, UIViewController'ın içinde bulunduğu popoverController'ı geri almak için özel, belgesiz bir yöntem var ... Yukarıdaki denetleyicilerin herhangi biri ile tam olarak aynı olması gerektiğinden, neden hiçbir zaman halka açılmadıklarını bilmiyorum.

Özel, belgelenmemiş dünyada bile, dismissModalViewcontrollerAnimated: eşdeğeri yoktur. Bu referansı almak zorunda kalacaksınız ve sonra bu şekilde reddedeceksiniz.

+1

Dokümanlarda arama yaptıktan sonra buna da şaşırdım. Ne yazık ki, bu durum boyunca istenmeyen bağımlılıklar ekliyor. – Maurizio

+0

iOS8'de şu anda bir seçim yapabilirsiniz: self.popoverPresentationController – Jacky

1

Bunu çözmenin bir başka yolu, gözlemcisini -(void)closePopoverIfNecessary:(NSNotification*)notification gibi bir yönteme ekleyen ve denetimleri için isteğe bağlı olarak popover (ler) ini kapatmak için yöntemi uygulayan bir soyut görünüm denetleyicisi (tüm görünüm denetleyicileriniz için) oluşturmaktır. açık. Sonra popover'in denetleyicisinden, bildirimi kapatmak için bildirimi başlatırsınız. Gerekirse, diğer bilgileri de bildirim (userInfo) yoluyla iletebilirsiniz.

Bu şekilde, üst başvurulara gerek yoktur.

+0

Bu, denetleyicinin "dealloc" öğesindeki denetleyicileri kaldırmayı unutmayın. –