在故事板中使用自定义uiview

时间:2014-05-17 12:23:04

标签: ios uiview uiviewcontroller

所以,我使用的是storyboard,我已经拖到我的UIViewController UIView内。

我们称之为customView,它的类称为SPView。该类在检查器窗口中设置。 SPView.h内有许多属性

我尝试了以下内容:

  1. 如果我在UIViewstoryboard)内拖动标签,则会显示标签,但我无法将其连接到SPView.h中的某个商店通过拖放。

  2. 如果我创建一个新的XIB文件,里面有标签,我可以按照自己的意愿进行连接。

  3. 然后在我的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文件,以便更容易地检查它们。)

    你可以帮我吗?

2 个答案:

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