2017-04-26 225 views
0

enter image description here output image顯示自定義的視圖問題

當我點擊按鈕,我只得到1額外的觀點,但我想成爲點擊數動態添加一個視圖,(如for循環)...請幫助我這個代碼,由於提前, 這只是我的代碼部分

if (boolVal == true) { 
    CGRect newFrameC = CGRectMake(_centreView.frame.origin.x, _centreView.frame.origin.y, _centreView.frame.size.width, 50); 
    CGRect newFrameL1 = CGRectMake(_label2.frame.origin.x, _label2.frame.origin.y+50, _label2.frame.size.width, 50); 
    _centreView.frame = newFrameC; 
    _label2.frame = newFrameL1; 
    boolVal = false; 
}else if (boolVal == false){ 
    CGRect newFrameC = CGRectMake(_centreView.frame.origin.x, _centreView.frame.origin.y, _centreView.frame.size.width, 1); 
    CGRect newFrameL1 = CGRectMake(_label2.frame.origin.x, _label2.frame.origin.y-50, _label2.frame.size.width, 50); 
    _centreView.frame = newFrameC; 
    _label2.frame = newFrameL1; 
    boolVal = true; 
} 
+0

你想在背景視圖上添加序列視圖? – xiaoming

+1

你面臨什麼問題?框架設置不正確或其他問題? – CodeChanger

回答

0

DummyViewController.m

#import "DummyViewController.h" 
#import "ExtraView.h" 

@interface DummyViewController() 

@property (nonatomic) unsigned int numberOfExtraViews; 
@property (nonatomic, strong) NSMutableArray<ExtraView*>* extraViews; 
@property (nonatomic, strong) UILabel* label1; 
@property (nonatomic, strong) UILabel* label2; 

@end 

@implementation DummyViewController 

-(void) removeExtraViews{ 
    for (ExtraView* extraView in _extraViews){ 
     [extraView removeFromSuperview]; 
    } 
    [_extraViews removeAllObjects]; 
} 

-(CGRect) getExtraViewFrame{ 
    CGRect extraViewFrame = _label1.frame; 
    if (_numberOfExtraViews > 0) { 
     extraViewFrame = [_extraViews lastObject].frame; 
    } 
    extraViewFrame.origin.x += extraViewFrame.size.height; 
    return extraViewFrame; 
} 

- (void) addExtraViews{ 
    //[self removeExtraViews]; 
    int numberOfExtraViewsToDraw = _numberOfExtraViews - _extraViews.count; 

    for (int iterator = 0; iterator < numberOfExtraViewsToDraw; iterator ++){ 
     CGRect extraViewFrame = [self getExtraViewFrame]; 
     ExtraView *extraView = [[ExtraView alloc]initWithFrame:extraViewFrame]; 
     [self.view addSubview:extraView]; 
     [_extraViews addObject:extraView]; 
    } 

    if (numberOfExtraViewsToDraw > 0) { 
     CGRect label2Frame = [_extraViews lastObject].frame; 
     label2Frame.origin.x += label2Frame.size.height; 
     _label2.frame = label2Frame; 
    } 

} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    [self addExtraViews]; 
    //rest of your code 
} 

//Use this code in initWithNib/initWithCoder. Don't copy paste the same 
-(instancetype)init{ 
    self = [super init]; 
    if (nil != self){ 
     _numberOfExtraViews = 0; 
     _extraViews = [[NSMutableArray alloc]init]; 
    } 
    return self; 
} 

//the function that gets hit when the button is tapped. 
- (void) onButtonTap{ 
    _numberOfExtraViews++; 
    [self.view setNeedsDisplay]; 
} 

注意以下幾點:

  1. 我不明白boolVal是什麼,但如果它保持在按鈕的點擊切換,你永遠不會有多個views.I假定它切換,所以我沒有使用它。
  2. 使用initWithNib/initWithCoder中的init代碼。不要複製粘貼相同。不要覆蓋給定的代碼。只需附加到當前的init。
  3. 在我的代碼onButtonTap是當按鈕被點擊時被擊中的函數。
  4. 我已經通過確保viewDidLoad方法獲得了命中。但我不認爲這是必要的。你也可以這樣做:

    //the function that gets hit when the button is tapped. 
    - (void) onButtonTap{ 
        _numberOfExtraViews++; 
        [self addExtraViews]; 
    } 
    

什麼已經做了:

  1. 讓我叫你爲CENTERVIEW所謂的extraView。會有很多extraViews,所以我會爲相同的(extraViews)創建一個數組。
  2. 視圖數的計數存儲在numberOfExtraViews中。在init中啓動爲0。
  3. 無論何時按下按鈕,我們都會增加計數和呼叫視圖的setNeedsDisplay,然後依次觸碰viewDidLoad方法
  4. 在viewDidLoad中,我們添加extraViews。