我试图理解如何复制其中具有一组uibuttons的uiview。
一直在尝试遵循这个问题/答案,但我对atm感到很困惑:
Make a deep copy of a UIView and all its subviews
基本上试图使一个vc显示带有按钮的两组uiview。这是常规视图的样子:
Points of team 1:
+ + + +
1 2 3 P
- - -
Points of team 2:
+ + + +
1 2 3 P
- - -
我需要复制它。我可能可以将对象拖到ViewController上,但是如果我创建另一个副本,它将有太多的IBaction。
关于如何处理的想法?
编辑:
这就是我解决的添加多个按钮的方法
Add a multiple buttons to a view programmatically, call the same method, determine which button it was
最佳答案
首先,我将创建一个名为PointsView之类的UIView子类。
看起来像这样...
Points of [name label]:
+ + + +
1 2 3 P
- - -
它将具有
NSString *teamName
之类的属性,并根据相关标签设置这些属性。它还可能具有
NSUInteger score
的属性,因此您可以设置PointView对象的得分值。所有这些都与UIViewController完全分开。
现在,在您的UIViewController子类中,您可以执行以下操作:
PointsView *view1 = [[PointsView alloc] initWithFrame:view1Frame];
view1.teamName = @"Team 1";
view1.score1 = 1;
view1.score2 = 2;
view1.score3 = 3;
[self.view addSubView:view1];
PointsView *view2 = [[PointsView alloc] initWithFrame:view2Frame];
view2.teamName = @"Team 2";
view2.score1 = 1;
view2.score2 = 2;
view2.score3 = 3;
[self.view addSubView:view2];
现在不涉及复制。您只需创建一个对象的两个实例。
编辑
正在创建您的视图子类...
创建视图子类的最简单方法是执行以下操作...
创建文件... PointsView.m和PointsView.h
.h文件看起来像这样...
#import <UIKit/UIKit.h>
@interface PointsView : UIView
@property (nonatomic, strong) UILabel *teamNameLabel;
// other properties go here...
@end
.m看起来像这样...
#import "PointsView.h"
@implementation PointsView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.teamNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 21)];
self.teamNameLabel.backgroundColor = [UIColor clearColor];
[self addSubView:self.teamNameLabel];
// set up other UI elements here...
}
return self;
}
@end
然后在视图控制器中像这样在代码中添加PointsView(即不使用Interface builder)...
- (void)viewDidLoad
{
[super viewDidLoad];
PointsView *pointsView1 = [[PointsView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)];
pointsView1.teamNameLabel.text = @"Team 1";
[self.view addSubView:pointsView1];
// add the second one here...
}
您也可以在Interface Builder中创建和添加这些视图,但是在这里很难解释。
如果以这种方式进行设置,则可以使用IB来设置其余的UIViewController。只是不要使用IB来设置PointsViews。它与我在这里显示的方式不兼容。