2012-04-05 8 views
0

Ich glaube, dass diese Frage dupliziert, aber ich kann es nicht finden = (. Wie eigene UIView Klasse erstellen, die von (iPhone/iPad geladen wird) *. Xibbenutzerdefinierte Ansicht für den universellen Einsatz

ich habe versucht nächste Dinge:

@interface CurtainView : UIView 

...

- (id)init { 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     self = [[[NSBundle mainBundle] loadNibNamed:@"CurtainView_iphone" owner:self options:nil] objectAtIndex:0]; 
     [self setFrame:CGRectMake(0, 0, 320, 460)]; 
    } 
    else {     
     self = [[[NSBundle mainBundle] loadNibNamed:@"CurtainView_ipad" owner:self options:nil] objectAtIndex:0]; 
     [self setFrame:CGRectMake(0, 0, 768, 1004)]; 
    } 
    return self; 
} 
- (void)drawRect:(CGRect)rect 
{ 
    NSLog(@"there should be some animation on view appirance"); 

} 

und ...

CurtainView* curtain = [[CurtainView alloc] init]; 
NSLog(@"before"); 
[self.view addSubview:curtain]; 
[curtain drawRect:CGRectMake(0, 0, 320, 460)]; 

Aber in diesem Fall habe ich nicht das Ergebnis, das ich erwarte, und DrawRect ruft nicht. Ich hoffe, es gibt eine einfache Möglichkeit, benutzerdefinierte Ansichten für universelle Apps zu erstellen.

Antwort

0

diesen Code in .h-Datei setzen #import

@interface CurtainView : UIView 

@end 

diesen Code in .m-Datei

setzen
#import "CurtainView.h" 

@implementation CurtainView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect{ 
    // Drawing code 
    NSLog(@"there should be some animation on view appirance"); 
} 

jetzt diese UIView rufen Sie Ihre Viewcontroller Klasse bilden. Dies ruft drawRect

CurtainView* curtain = [[CurtainView alloc] init]; 
NSLog(@"before"); 
[curtain drawRect:self.view.frame]; 
[self.view addSubview:curtain]; 

Sie Ihre Viewcontroller Klasse

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; 
} else { 
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; 
} 
+0

Ich putted nur die Fragmente meines Codes in der Frage. Es gibt "#import". Es scheint, dass Problem darin ist, "objectAtIndex: 0" aus dem Bungle zu laden - Es lädt nicht diese UIView, die ich erwarte = (. Aber Vov4yk

+0

und in Ihrer Antwort: Es gibt keinen Mechanismus zum Laden * .xib für iPhone/iPad – Vov4yk

+0

@ Vov4yk siehe meine bearbeitete Antwort – priyanka

0

ok aufrufen können. sorry, habe ich mein Misstake:

ist es notwendig zu verwenden:

[self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"Curtain_iPhone" owner:self options:nil] objectAtIndex:0]]; 

mein statt:

self = [[[NSBundle mainBundle] loadNibNamed:@"CurtainView_iphone" owner:self options:nil] objectAtIndex:0]; 

hoffen, dass es für einige ein hilfreich.

Darüber hinaus weiß ich nicht warum, aber Eigenschaft "undurchsichtig" für die Ansicht sollte in "init" -Methode festgelegt werden, nicht nur in IB.