2015-04-24 144 views
1

我創建了一個UIView(KGCalloutView),並通過拖動View對象並將其設置爲KGCalloutView將其放置在Storyboard(Main.storyboard)中。當我運行項目時,視圖從不顯示在故事板中。UIView不在故事板上顯示

我第一次嘗試解決需要添加以下方法,但它導致我相信一個無限循環(可以理解)並最終崩潰。

- (void)awakeFromNib { 
    if ([[NSBundle mainBundle] loadNibNamed:@"KGCalloutView" owner:self options:nil]) { 
     [self.view setFrame:[self bounds]]; 
     [self addSubview:self.view]; 
    } 
} 

接下來我嘗試添加下面的init方法,但沒有解決問題之一:

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

    return self; 
} 

我嘗試後我的.xib和Main.storyboard的圖像,但我想我的名聲ISN還不夠高。

這裏是KGCalloutView.h:

@interface KGCalloutView : UIView <UIPickerViewDataSource, UIPickerViewDelegate> 

@property (nonatomic) IBInspectable NSString *title; 
@property (strong, nonatomic) IBOutlet KGCalloutView *view; 

@property (weak, nonatomic) IBOutlet UITextField *titleField; 
@property (weak, nonatomic) IBOutlet UIPickerView *typePickerView; 

@end 

這裏是KGCalloutView.m:

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

- (void)awakeFromNib { 
    if ([[NSBundle mainBundle] loadNibNamed:@"KGCalloutView" owner:self options:nil]) { 
     [self.view setFrame:[self bounds]]; 
     [self addSubview:self.view]; 
    } 
} 

-(void)layoutSubviews{ 
    self.titleField.text = @"test"; 
    self.typePickerView.dataSource = self; 
    self.typePickerView.delegate = self; 
} 

這裏是我的ViewController.h:

@interface ViewController : UIViewController 

@property (weak, nonatomic) IBOutlet KGCalloutView *callout; 

@end 

這裏是我ViewController.m:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

回答

1

NG代碼,我是不是能夠得到一個工作的答案,所以我只是做了我的視圖控制器,而不是我的自定義視圖筆尖加載:/

1

您需要在ViewController中加載視圖才能看到它。

首先,確保設置您的視圖的文件的所有者級到視圖控制器(看起來像你這樣做了)

file owner

其次,連接視圖到視圖控制器(編號)

三的財產,而不是KGCalloutView.m實施,在ViewController.m做如下代碼

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    if ([[NSBundle mainBundle] loadNibNamed:@"KGCalloutView" owner:self options:nil]) { 
//This will load view from storyboard to IBOutlet callout 
     [self.callout setFrame:[self.view bounds]]; 
     [self.view addSubview:self.callout]; 
    } 
} 
+0

感謝莎莉。問題是我不想在視圖控制器中加載視圖。我希望能夠在界面生成器中將視圖添加到視圖控制器,以便我可以添加我的約束。我知道我可以通過編程添加約束,但我寧願不必。 –

+0

此外,我的視圖KGCalloutView.xib的文件所有者是KGCalloutView,它是UIView的子類,而不是UIViewController,如果不清楚的話。 –

+0

對於第二個項目,我確實在視圖控制器上有一個與故事板上的KGCalloutView對象綁定的屬性。 –

1

把筆尖LOADI下的initWithCoder

+0

這會導致調用initWithCoder。我可以把一些邏輯放在第一次執行它,但這是必要的嗎? –

+0

把你在awakeFromNib下的東西放在initWithCoder的下面,直接返回。 – Vinny1575