复制UIView,其中包含UIButtons

时间:2013-05-16 13:41:46

标签: ios objective-c cocoa-touch uiview uibutton

我正在尝试理解如何复制其中包含一组uibutton的uiview。

试图按照这个问题/答案,但我真的很困惑atm:

Make a deep copy of a UIView and all its subviews

基本上尝试制作一个用按钮显示两组uiviews的vc。这就是常规视图的样子:

Points of team 1:
   +  +  +  +
   1  2  3  P
   -  -  -  


Points of team 2:
   +  +  +  +
   1  2  3  P
   -  -  -  

我需要复制一份。我可以将对象拖到viewcontroller上,但是如果我创建另一个副本,它会有太多的IBactions。

关于如何处理这个的想法?

修改 这就是我解决添加多个按钮的方法

Add a multiple buttons to a view programmatically, call the same method, determine which button it was

1 个答案:

答案 0 :(得分:3)

首先,我将创建一个名为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构建器),就像这样......

- (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。它不适用于我在这里展示的方式。