[英]iOS - Custom View that can contain other views
有一段時間我一直在使用自定義單元格(有自己的筆尖)來表沒有問題。 現在,在一個新項目中,我發現需要一個可重復使用的自定義視圖(不是一個單元格),它將擁有一個標題,一個按鈕,以及另一個可以容納更多視圖的UIVIew。 我稱之為“部分”:
我們的想法是能夠在故事板中使用此部分(使用UIView並相應地設置自定義類)。 這樣,我在UIView里面放置的任何視圖實際上都包含在該部分的內部UIView中。
我認為難以實際獲得使用IB和Storyboard實際駐留在內部UIView中的視圖而不是Section的根UIView。 結果只是使自定義視圖(沒有任何內部視圖)不能像我期望的那樣工作。 這是代碼,它基於我已經完成和工作的幾十個自定義單元格(雖然針對通用UIView的特定init方法進行了調整):
#import "SectionContainer.h"
@implementation SectionContainer
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"SectionContainer" owner:self options:nil];
self = [nibArray objectAtIndex:0];
/*NSArray *nibRoot = [[UINib nibWithNibName:@"SectionContainer" bundle:nil] instantiateWithOwner:self options:nil];
[self addSubview:[nibRoot objectAtIndex:0]];*/
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"SectionContainer" owner:self options:nil];
self = [nibArray objectAtIndex:0];
/*NSArray *nibRoot = [[UINib nibWithNibName:@"SectionContainer" bundle:nil] instantiateWithOwner:self options:nil];
[self addSubview:[nibRoot objectAtIndex:0]];*/
}
return self;
}
匹配的XIB將其根視圖設置為此自定義類(就像我在自定義單元格中一樣)
問題
這個自定義類導致EXC_BAD_ACCESS代碼= 2,並且通過逐步執行它可以告訴我,就好像該類是遞歸調用的一樣。 在調用initWithDecoder之后調用call,直到發生EXC_BAD_ACCESS錯誤
我做了什么
'NSUnknownKeyException',原因:'[setValue:forUndefinedKey:]:此類不是鍵值sectionContainerView的鍵值編碼兼容
我真的很感激這方面的一些指導。 謝謝。
您需要在故事板中使用名為Custom Container View
的組件。 我不能在這里發布代碼,因為它涉及到故事板中的一些配置,代碼將取決於您如何探測您的視圖/ VC,但您可以在此處閱讀相關指南:
首先,遞歸調用在initWithCoder:上,加載一個nib意味着通過initWithCoder實現其視圖的實現:
這就是為什么你不能以這種方式使用你在nib上設計的UIView子類(通過在故事板上甚至在另一個nib上設置視圖的類)。
使用它的唯一方法是在代碼中通過nib實例化它。
Section *sectionView = [[[NSBundle mainBundle] loadNibNamed:nibName owner:owner options:options] objectAtIndex:index];
現在,通過你所做的筆尖連接:你可以從筆尖上的對象連接到另一個在筆尖上找不到的對象。 這就是文件所有者的用途。 您必須設置其(文件所有者)類,並與其建立連接,並使用其實現連接的類的實例作為加載筆尖時的所有者參數。
但我想這不是你想要的。 我想你想通過“Section”來訪問nib上的子視圖,我假設它是nib上的根視圖。 您可以在Section類上創建IBOutlet(或IBAction,IBOutletCollection)屬性。 要將它們與筆尖上的其他對象連接起來,控制點擊筆尖上的“截面”視圖,您將看到從那里做什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.