2011-11-13 32 views
2

我想要做的是什么,我知道的是在ASP.Net直线前进,也许我只需要调整我的想法(我自学在iOS中开发),但我无法弄清楚如何用XCode/Objective-C来实现这一点。创建iOS的框架ASP.Net类似的用户控制

我想要做的是布局的几个按钮,一个标签,像在ASP.Net用户控件可重复使用的格式编写一些代码。然后拿着这个'包',并在故事板上的多个地方使用它。

我已经看到了很多的例子为继承单一的控制,但我想要做的就是包几个控件在一起,然后能够拖动/添加到故事板。这是可行的吗?或者我需要创建类文件,但手动添加所有控件以将它们链接到类?或者更好/有可能使用自定义类动态添加视图/故事板中的控件?

回答

0

所以如果你想在IB设计你需要做更多的腿部工作。

首先,我们需要一些东西来包含我们的控制,所以我们需要的NSObject子类来充当控制器,并将其命名为明智的。 (比进myWidget更好)

@interface MyWidget : UIView 

我们的基本出发帆布奠定我们的组件上,我们需要一个UIView即IB可以得到一个处理和使用。添加到您的头

@property (nonatomic, retain) IBOutlet UIView *view; 

然后给这个伊娃一个getter/setter和做内存管理中的.m

@synthesize view = _view; 

... 

- (void)dealloc; 
{ 
    [_view release]; 
    [super dealloc]; 
} 

现在创建一个单一视图笔尖启动和设置File's OwnerMyWidget。您现在应该能够从File's Ownerctrl + click并拖动到UIView对象,然后选择view。所以在这一点上,我们的笔尖知道如何连接到我们的MyWidget类,但我们的MyWidget类不知道笔尖。

MyWidget.m我们需要告诉该类使用- (id)initWithFrame:(CGRect)frame;- (id)initWithCoder:(NSCoder *)aDecoder;中的笔尖,因此我们可以在代码中或使用IB实例化该类。

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self loadView]; 
    } 
    return self; 
} 

- (id)initWithCoder:(NSCoder *)aDecoder; 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self loadView]; 
    } 
    return self; 
} 

- (void)loadView; 
{ 
    [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]; 
    [self addSubview:self.view]; 
} 

现在当out类被实例化时,它会将自己挂钩到nib。在这一点上,您回到了您通常如何使用标准UIViewController向xib添加一些东西,然后将它连接到您的控制器并使用它。

在所有一个很好的起点看起来像......

MyWidget.h

#import <UIKit/UIKit.h> 

@interface MyWidget : UIView 

@property (nonatomic, retain) IBOutlet UIView *view; 

@end 

MyWidget.m

#import "MyWidget.h" 

@interface MyWidget() 

- (void)loadView; 

@end 

@implementation MyWidget 

@synthesize view = _view; 

- (void)dealloc 
{ 
    [_view release]; 
    [super dealloc]; 
} 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self loadView]; 
    } 
    return self; 
} 

- (id)initWithCoder:(NSCoder *)aDecoder; 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self loadView]; 
    } 
    return self; 
} 

- (void)loadView; 
{ 
    // MyWidget is the name of the xib as well 
    [[NSBundle mainBundle] loadNibNamed:@"MyWidget" owner:self options:nil]; 
    [self addSubview:self.view]; 
} 

@end