2010-09-22 18 views
11

Birisi bana saatlerce sıkışmış olarak bu konuda bana yardımcı olabilir umarım.iPhone: Bir alt görüntüden bir üst/alt yöntem çağırmak

Bir tür resim kitabı yapmaya çalışıyorum. Kapsayıcı olan bir görünüm var ve addsubview kullanarak buna alt görünümler ekliyorum.

Alt görünümde, ana görünümde yöntemi tetiklemek istediğim hareketleri vb. Temsilciyi nasıl tetikleyeceğimi öğrendim, ancak ana görünümü tetiklemek için temsilci alamıyorum. Bunu yapmanın 10 farklı yolunu okudum ve hiçbir işe yaramadı.

Şimdi süper görünümün ne olduğu konusunda kafam çok karışık. Sadece konularda şaşırtmak için, temsilci bir tabcontroller vardır ve ana görünüm ben self.tabcontroller.parentviewcontroller, selectedview çalıştı temsilci olarak

[self.view.superview method] 
[self.superview method] 

denedik 1

sekme düğmesi, süper view.Super

olduğunu

UPDATE: Alt görünümün, ana görünümden bağımsız olarak yeniden kullanılabilir görünümü olması gerekir. Ayrıca süper görüntülemenin alt görüntülerle bir görüş olduğunu düşündüğüm için süper görüntüyü de ayarlamadım (lütfen beni öldürmeyin). Yani belki de sadece ebeveyn görüşünü süper bir görünüme ayarlamalıyım?

+0

mı? Bu bir UIViewController mı? – kubi

+0

onun bir alt sınıf UIViewController – Burf2000

cevap

23

böyle şeyler yapmanın uygun yolu protokolü ve temsilci desen kullanmaktır istediğiniz zaman .

ardından Superview bu protokolü uygulamak

@protocol subViewDelegate 
    -(void)somethingHappened:(id)sender; 
@end 

gibi bir protokol tanımlayın:

@interface superView:UIViewController<subViewDelegate> { 
... 
} 
... 
@end 

sizin subview bu

@interface subView : UIView { 
    id<subViewDelegate> delegate; 
    ... 
} 
@propery (nonatomic, assign) id<subViewDelegate> delegate; 
... 
@end 

gibi Subview bir temsilci özellik tanımlamak bu delegeyi şu şekilde arayın:

[self.delegate somethingHappened :self]; 
+0

Bunlar viewControllers görünümleri değil. Ayrıca alt görünüm süper görünümden bağımsız olabilir. E.g onun diğer tüm kullanıldığı yer – Burf2000

+0

aynı prensipte her ikisi için de geçerlidir. Bir görünümü ve alt görünümlerini yöneten bir viewController uygulamasının olduğunu varsaydım. – VdesmedT

+0

Nope, her birinin bir görünümüController vardır. Yani bir kitabın her bir sayfa ayrı bir sınıf – Burf2000

3

Verilen herhangi bir kod olmadan size yardımcı olabilir, ancak deneyelim biraz zor:

  1. bir protokol oluşturun: ancak (ı "MyProtocol" arayacak) gibi onu adlandırın ve buna tanım eklemek superview içinde aramak istediğiniz işlevin, "responseToSwipe" olarak adlandırın
  2. Eğer süper görüntüünüz bir UIView ise, UIView'in kendi alt sınıfınızı yaratmanız ve süper görüntülemenizi bu sınıfın bir örneği haline getirmeniz gerekir.
  3. sizin (yeni) oluşturuldu Superview sınıfı
  4. sizin subview yazın id bir örnek değişkeni oluşturma "respondToSwipe" yöntemi 1. protokolünü uygulamak) bir uygulamaya edelim ve adını ancak, örneğin ister "MyDelegate".
  5. 2/3 oluşturulan Superview geçirin.) Sizin "myDelegate" değişken
  6. Çağrı [myDelegate respondToSwipe] Eğer
-1

Ebeveyn görünümünüz, alt görünümü eklediğinde alt görüntünün süper görünümünü oluşturdu mu?Aksi halde alt ekran, süper görüşünün kim olduğunu bilmiyor.

Yöntem işleyicisini çağırmak için nesnelerin adlandırmada daha standart bir yol, temsilci bir üst görünüm yapmak yerine, bir özellik haline getirir ve alt görünümün hem temsil edilen temsilci varlığını hem de yöntemi ele alıp alamayacağını denetlemesini sağlar.

+0

Superview'a hiçbir şey ayarlamamıştım, Bir görünüm ekledim süper oldu – Burf2000

+0

"süper" süper görüntü ile aynı değildir. Dolayısıyla, varsayımınız birçok nedenden dolayı yanlıştır (başka bir soru). – hotpaw2

+0

Bir görünüme alt görünüm ekledikten sonra ebeveyn görünümü yöntemlerini çağırmak istiyorum? herhangi bir fikir? – Burf2000

0

özel bir görünüm için, UIControl alt sınıf ve kontrol olaylarını kullanabilirsiniz:

  • bazı kontrol olaylarını tanımlar. En fazla yapmakta serbestsin olaylar addTarget diyoruz almak isteyen her kim 4 kumanda olaylar (UIControlEventApplicationReserved = 0x0F000000)
  • Have: Bir UIGestureRecognizer kullanabilirsiniz, [self sendActionsForControlEvents:events]

Alternatif

  • kontrol çağrısı var: eylemi: forControlEvents stil arayüzü (addTarget: eylem :).

    Alternatif sadece UIGestureRecognizer (OS 3.2+) İşte

  • İlgili konular