2010-04-26 15 views

cevap

18

windows property'un içeriğini ve tüm görünümlerin tüm alt görünümlerini dökerseniz, UIAlertView öğesinin ana pencereyi kaplayan ayrı bir pencerede olduğunu görebilirsiniz. Burada bir denetleyici ve bir masa görüşüne sahip bir navbarım var (ilgilerini çekmediği için alt görünümlerini kaldırdım).

<UIWindow: 0x411fd50; frame = (0 0; 320 480); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x4120af0>> 
: <UILayoutContainerView: 0x4123310; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x411f800>> 
: | <UINavigationTransitionView: 0x4123500; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x41232e0>> 
: | : <UIViewControllerWrapperView: 0x4519d30; frame = (0 64; 320 416); autoresize = W+H; layer = <CALayer: 0x4519a40>> 
: | : | <UITableView: 0x7808000; frame = (0 0; 320 416); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x45182a0>> 
: | <UINavigationBar: 0x45018b0; frame = (0 20; 320 44); clipsToBounds = YES; autoresize = W; layer = <CALayer: 0x4500fe0>> 
: | : <UINavigationItemView: 0x4522a20; frame = (100 8; 160 27); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x4526310>> 
: | : <UINavigationItemButtonView: 0x45230a0; frame = (5 7; 87 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x4520260>> 
<_UIAlertOverlayWindow: 0x4179b70; frame = (0 0; 320 480); opaque = NO; layer = <CALayer: 0x4188dc0>> 
: <UIAlertView: 0x4194bc0; frame = (3.8 161.95; 312.4 177.1); transform = [1.1, 0, 0, 1.1, 0, 0]; opaque = NO; animations = { transform=<CABasicAnimation: 0x4191160>; opacity=<CABasicAnimation: 0x41226f0>; }; layer = <CALayer: 0x4144c30>> 
: | <UILabel: 0x4177e70; frame = (12 15; 260 23); text = 'Name of Date'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x4179370>> 
: | <UILabel: 0x418b100; frame = (12 45; 260 41); text = 'Name of the date that you...'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x4128450>> 
: | <UIThreePartButton: 0x41942a0; frame = (11 102; 262 43); opaque = NO; tag = 1; layer = <CALayer: 0x4191f30>> 

Dökümanı üreten kod İşte. ,

void dumpView(UIView* aView, NSString* indent) { 
    if (aView) { 
     NSLog(@"%@%@", indent, aView);  // dump this view 

     if (aView.subviews.count > 0) { 
      NSString* subIndent = [[NSString alloc] initWithFormat:@"%@%@", 
          indent, ([indent length]/2)%2==0 ? @"| " : @": "]; 
      for (UIView* aSubview in aView.subviews) dumpView(aSubview, subIndent); 
      [subIndent release]; 
     } 
    } 
} 

void dumpWindows() { 
    for (UIWindow* window in [UIApplication sharedApplication].windows) { 
     dumpView(window, @"dumpView: "); 
    } 
} 
+0

Teşekkürler, bir göz atacağım. BTW, güzel biçimlendirilmiş çöplüğü nasıl ürettin? –

+1

Bu hile yapar. fikri Bulundu http://stackoverflow.com/questions/2528929/iphone-sdk-check-if-a-uialertview-is-showing - (BOOL) alertIsActive (UIWindow * penceresinde için { \t ([window.subviews sayısı] eğer [UIApplication sharedApplication] 0) \t \t \t> { \t \t) .Windows halinde ([[window.subviews objectAtIndex: 0] isKindOfClass: [UIAlertView sınıfı]]) \t \t \t \t YES; \t NO; } –

+0

Çok kullanışlı snippet - paylaşım @progrmr için teşekkürler – Till

4

Etkin UIAlertView ayrı bir pencerede (_UIAlertOverlayWindow) yaşıyor. Bulmak için .windows property kullanın.

Tüm kullanıcı arabirimi ana iş parçacığında çalışır.

1

Eğer pencere ve zamanlama ile açıklamak sorun itibaren alertView:didDismissWithButtonIndex: uygulamak gerekir gibi geliyor: Ben vesilesiyle faydalı bir şey beklediğim yapıyor değilken neler olduğunu görmek için buldum. Takip kodunuzu bu yöntem içinden tetikleyebilirsiniz.

DÜZENLEME: eğer bu işe yaramadıysa, pencerenin gerçekten gitmeyi garanti ettiği bir gecikmeden sonra FB malzemelerini yürütmek için bir gecikme yapmayı deneyeceğim.

+0

İyi fikir, ama bunu denedim ve problem devam ediyor, hatta animasyonlu = NO. –