2017-04-26 152 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。