所以,我使用的是storyboard
,我已经拖到我的UIViewController
UIView
内。
我们称之为customView,它的类称为SPView
。该类在检查器窗口中设置。 SPView.h
内有许多属性
我尝试了以下内容:
如果我在UIView
(storyboard
)内拖动标签,则会显示标签,但我无法将其连接到SPView.h
中的某个商店通过拖放。
如果我创建一个新的XIB文件,里面有标签,我可以按照自己的意愿进行连接。
然后在我的UIViewController
内,我尝试了其中任何一个:
self.customView =[[SPView alloc] initWithFrame:CGRectMake(60, 60, 200, 260)]
self.customView =[[SPView alloc]init];
在我的SPView中,如果我使用它:
- (id)initWithCoder:(NSCoder *)aDecoder {
NSLog(@"initWitchCoder called");
if ((self = [super initWithCoder:aDecoder])) {
//[self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"SPView" owner:self options:nil] objectAtIndex:0]];
[self baseInit];
}
标签未显示。
如果我取消注释评论,initWithCoder
将永远被调用,应用程序最终会崩溃。
我想要的是:
在UIView
中设置自定义UIViewController
,可以在故事板中或以编程方式设置(但如果图形数据在storyboard
中设置或单独设置,则会更好。 XIB文件,以便更容易地检查它们。)
你可以帮我吗?
答案 0 :(得分:0)
您可以在UIViewController类中定义以下方法,并为SPView创建一个XIB。
- (SPView*) loadCustomViewFromNib
{
SPView *spView = nil;
NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"SPView"
owner:nil
options:nil];
for (id object in array)
{
if ([object isKindOfClass:[SPView class]])
{
spView = (SPView*)object;
break;
}
}
return spView;
}
让SPView初始化如下所示
self.customView = [self loadCustomViewFromNib];
答案 1 :(得分:0)
你不能将出口拖到自定义类uiview类。只有在使用xib时才允许。 您只能在其父视图控制器中删除该自定义视图的出口。 您可以在自定义视图的子视图中设置标记。并可以使用下面的代码轻松访问它们。 假设您在自定义视图中有一个带有标记的子视图:2
- (id)initWithCoder:(NSCoder *)aDecoder {
NSLog(@"initWitchCoder called");
if ((self = [super initWithCoder:aDecoder])) {
//[self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"SPView" owner:self options:nil] objectAtIndex:0]];
UILabel *lbl = (UILabel *)[self viewWithTag:2];
[self baseInit];
}
因此您必须将标签设置为子视图才能访问它们
在您的uiviewcontroller中,您必须直接删除插座。不需要这个 像这样它会自动初始化@property (weak, nonatomic) IBOutlet SPView *customView; //right and easy way
X self.customView =[[SPView alloc] initWithFrame:CGRectMake(60, 60, 200, 260)]
X self.customView =[[SPView alloc]init];