2012-02-11 35 views
1

我有一個基本的子視圖,當按下按鈕時,從屏幕頂部向上滑動80。我創建了另一個類 - AdvancedView - 繼承自UIView。我想要做的是首先,將所有負責創建子視圖的代碼推送到它自己的類中:AdvancedView。然後,我想以某種方式將其設置爲子視圖的前100位顯示加載主視圖時的位置。我將在頂部顯示一個按鈕,顯示這個子視圖的一部分,它會上下切換(我知道如何編寫按鈕)。這裏是我需要投入AdvancedView和具有頂部100顯示代碼時,主視圖CalcViewController負載:如何將這個子視圖推入它自己的子類?

#import "CalcViewController.h" 
#import "CalculatorBrain.h" 
#import "AdvancedView.h" 

@property (nonatomic, strong) AdvancedView *myNewView; 
@synthesize myNewView = _myNewView; 

- (AdvancedView *) myNewView 
{ 
    if (!_myNewView) _myNewView = [[AdvancedView alloc] init]; 
    return _myNewView; 
} 

- (IBAction)subView { 

    self.myNewView.backgroundColor = [UIColor groupTableViewBackgroundColor]; 
    self.myNewView.frame = CGRectMake(0,489, 320, 200); 
    [self.view addSubview:self.myNewView]; 
    float bottomYOfDigitBeingDisplayed = 75; 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [button addTarget:self 
       action:@selector(aMethod:) 
    forControlEvents:UIControlEventTouchDown]; 
    [button setTitle:@"Show View" forState:UIControlStateNormal]; 
    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 
    [self.myNewView addSubview:button]; 


    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDelay:0.0]; 
    [UIView setAnimationDuration: 1.0]; 
    self.myNewView.frame = CGRectMake(0, bottomYOfDigitBeingDisplayed, 320, 400); 
    [UIView commitAnimations]; 
} 

回答

1

你的UIView子類可能看起來像這樣

.H

@interface AdvancedView : UIView { 

} 

@end 

.m

@implementation AdvancedView 

- (id) initWithFrame:(CGRect)rect{ 

    if(self = [super initWithFrame:rect]){ 

     self.backgroundColor = [UIColor groupTableViewBackgroundColor]; 

     UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [button addTarget:self 
        action:@selector(display:) 
        forControlEvents:UIControlEventTouchDown]; 
     [button setTitle:@"Show View" forState:UIControlStateNormal]; 
     button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 

     [self addSubview:button]; 

    } 

    return self; 



} 

- (void) display:(id)sender{ 

    float bottomYOfDigitBeingDisplayed = 75; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDelay:0.0]; 
    [UIView setAnimationDuration: 1.0]; 
    self.frame = CGRectMake(0, bottomYOfDigitBeingDisplayed, 320, 400); 
    [UIView commitAnimations]; 
} 

@end 

你的UIViewController可能看起來像這樣

#import "CalcViewController.h" 
#import "CalculatorBrain.h" 
#import "AdvancedView.h" 

@property (nonatomic, strong) AdvancedView *myNewView; 
@synthesize myNewView = _myNewView; 

- (AdvancedView *) myNewView 
{ 
    if (!_myNewView) _myNewView = [[AdvancedView alloc] initWithFrame: 
                CGRectMake(0,489, 320, 200);]; 
    return _myNewView; 
} 

- (IBAction)subView { 

    int advancedTag = 199998; 
    self.myNewView.tag = advancedTag; 

    if(![self.view viewWithTag:advancedTag]){ 
     [self.view addSubview:self.myNewView]; 
    } 
} 
+0

這似乎很好,但我似乎無法得到一個部分,比如前100名,子視圖在主視圖加載時顯示在屏幕底部。我希望用戶知道子視圖在那裏,並且能夠點擊子視圖頂部的一個按鈕,使它向上擴展到屏幕頂部。有沒有辦法做到這一點。也許以某種方式設置它的setter或getter,以便在CalcViewController加載後立即加載它? – Scott 2012-02-11 18:44:57

+0

self.myNewView.frame.origin.y = 480-100;你可以隨時設置它,它應該在你的子視圖中顯示視圖的前100部分。 – 2012-02-11 18:48:08

+0

我只是嘗試在幾個不同的位置設置它,並且我收到一條錯誤消息,說Expression不可分配。我試圖在subView動作中(連接到一個按鈕)設置它,當它不起作用時,我嘗試在myNewView setter中設置它。 – Scott 2012-02-11 19:07:08

相關問題