显示自定义的视图问题
问题描述:
当我点击按钮,我只得到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;
}
答
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];
}
注意以下几点:
- 我不明白boolVal是什么,但如果它保持在按钮的点击切换,你永远不会有多个views.I假定它切换,所以我没有使用它。
- 使用initWithNib/initWithCoder中的init代码。不要复制粘贴相同。不要覆盖给定的代码。只需附加到当前的init。
- 在我的代码onButtonTap是当按钮被点击时被击中的函数。
-
我已经通过确保viewDidLoad方法获得了命中。但我不认为这是必要的。你也可以这样做:
//the function that gets hit when the button is tapped. - (void) onButtonTap{ _numberOfExtraViews++; [self addExtraViews]; }
什么已经做了:
- 让我叫你为CENTERVIEW所谓的extraView。会有很多extraViews,所以我会为相同的(extraViews)创建一个数组。
- 视图数的计数存储在numberOfExtraViews中。在init中启动为0。
- 无论何时按下按钮,我们都会增加计数和呼叫视图的setNeedsDisplay,然后依次触碰viewDidLoad方法
- 在viewDidLoad中,我们添加extraViews。
你想在背景视图上添加序列视图? – xiaoming
你面临什么问题?框架设置不正确或其他问题? – CodeChanger