2013-05-16 2 views
3

Я пытаюсь понять, как сделать дубликат uiview, в котором есть набор uibuttons.Дублирование UIView, с UIButtons в нем

пытался следовать этот вопрос/ответ, но я действительно путают атм:

Make a deep copy of a UIView and all its subviews

В основном пытаются сделать VC, который отображает два набора UIViews с кнопками. Это будет выглядеть так:

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


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

И мне нужно сделать копию. Возможно, я просто перетаскиваю объекты в viewcontroller, но для него будет слишком много IBactions, если я создам другую копию.

Мысли о том, как с этим бороться?

EDIT: Вот как я решил добавлять несколько кнопок

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

ответ

3

Сначала я хотел создать UIView подкласс под названием PointsView или что-то.

Это будет выглядеть следующим образом ...

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]; 

Сейчас не Копируя участие. Вы просто создаете два экземпляра объекта.

EDIT

Создание вида подкласса ...

Самый простой способ создать свой вид подкласс должен сделать следующее ...

Создать файлы ... PointsView. м и PointsView.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 для создания точек зрения. Это не будет работать так, как я показал здесь.

+0

Я вижу, я думаю, это было то, чего я не хватало. Так что мне нужно перетащить объект в VC и назначить его подклассу, который я создал? Или я просто создаю экземпляр и назначаю ему позицию? – gdubs

+0

Отредактировал свой ответ. – Fogmeister

+0

Удивительно, плохо попробуйте это, как только я немного вернусь домой. Кроме того, вы знаете, что я использую раскадровки. Не уверен, что это то же самое, что и у IB. lol, довольно новый с этим. – gdubs