答案 0 :(得分:0)
What you have to do is to hold the subviews in an array.
Give the buttons (delete and add) the tag of the position in the array.
Then, when you click on "add view" or "delete" you will know where you have to insert or delete a subview in the array.
After that, set the button tags to the new indexes and then update your scrollview.
It would be easier in a tableview, because you don't have to calculate the content size and the positions in the scroll views
答案 1 :(得分:0)
我建议你根本不要使用UIViews标签,这不是可维护性。 首先让我们从viewcontrollers类开始,然后在那里添加三个属性:
@property(nonatomic, strong) UIButton *deleteButton;
@property(nonatomic, strong) UIButton *addButton;
@property(nonatomic, strong) NSMutableArray *addedSubviews;
viewDidLoad方法:
- (void)viewDidLoad {
[super viewDidLoad];
self.deleteButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
[self.view addSubview:self.deleteButton];
[self.deleteButton addTarget:self action:@selector(onDeleteSubview) forControlEvents:(UIControlEventTouchUpInside)];
self.addButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
[self.view addSubview:self.addButton];
[self.addButton addTarget:self action:@selector(onAddSubview) forControlEvents:(UIControlEventTouchUpInside)];
self.addedSubviews = [NSMutableArray new];
}
- (void)onDeleteSubview {
UIView *viewToDelete = [self.addedSubviews lastObject];
[viewToDelete removeFromSuperview];
[self.addedSubviews removeLastObject];
[self.view layoutSubviews];
}
- (void)onAddSubview {
UIView *desiredView = [UIView new]; // create view you need
[self.view addSubview:desiredView];
[self.addedSubviews addObject:desiredView];
[self.view layoutSubviews];
}
这里我们遍历每个视图并布局它们
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
float start_y_point = 0; //as you wish
float padding = 10;
[self.addedSubview enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL * _Nonnull stop) {
view.frame = CGRectMake({<#CGFloat x#>}, start_y_point + padding, {<#CGFloat width#>}, {<#CGFloat height#>})
start_y_point += view.frame.size.height + padding;
}];
}
最后一件事是放置按钮