2015-07-22 87 views
6

長話短說細胞,我想創建一個XIB文件,其中包含:的UITableView及其在廈門國際銀行文件

  1. 的視圖。在這個視圖中,它有很多東西和一個tableView。 (連接的數據源,委託給文件的所有者)。該視圖是XIB文件的主要視圖。

  2. 自定義單元格(由於XIB不支持原型tableView,所以可以用作tableView的原型單元格)。

我怎麼能達到這兩個? 另外,我想知道同樣適用於UICollectionView。

我已經創建了這兩個,將它加載到主視圖(主視圖在主要故事板中)。但是tableView不按預期加載自定義單元格。該單元格只是空白,看起來不像它在筆尖中設計的那樣。

編輯1

這裏是我如何註冊在故事板筆尖的主要觀點:

- (UIView *)buildViewFromViewControllerClass:(Class)viewControllerClass 
{ 
    id viewController = [[viewControllerClass alloc] initWithNibName:NSStringFromClass(viewControllerClass) bundle:nil]; 
    [viewController view].frame = self.containerView.bounds; 

    [self addChildViewController:viewController]; 

    return [viewController view]; 
} 

我有很多viewControllers,所以我弄清楚,這是添加VC的最好方式。

關於在上述說明中,筆尖,我只是用常規初始化:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // init cell 
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
    if (!cell) { 
     cell = [[PaymentCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CustomCell"]; 
    } 

    return cell; 
} 

如果在視圖中沒有負載的方法,我註冊筆尖到的tableView,它會在[tableView dequeueResuableCell...]崩潰。註冊代碼:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

// [self.tableView registerNib:[UINib nibWithNibName:self.nibName bundle:nil] 
//    forCellReuseIdentifier:@"CustomCell"]; 
// I'm commenting it, because it caused crash. 
} 

崩潰的消息:

***終止應用程序由於未捕獲的異常 'NSUnknownKeyException',原因:「[ 的setValue:forUndefinedKey:]:此類不是關鍵值爲 編碼符合密鑰tableView'。

我在這裏做錯了什麼? 這是一張我如何設計筆尖:

Model

正如你可以看到,文件的所有者的MAINVIEW連接到mainView,它包含的tableView。 customCell只是一個自定義設計的單元,在相同的文件(.m文件)中定義。

+0

你可以添加代碼,你如何添加單元格和註冊你的筆尖 –

+2

這裏是一個例子如何註冊一個筆尖'[self.tableView registerNib:[UINib nibWithNibName:@「 MyCell「bundle:nil] forCellReuseIdentifier:@」MyCell「];' –

+0

請看*編輯1 * – Eddie

回答

4

你應該如下注冊筆尖。

[self.tableView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellReuseIdentifier:@"MyCell"] 

我已經普遍看到的registerClass不加載的觀點,但只有類。我不知道爲什麼。

另外一個.xib應該只包含一個視圖。所以你必須爲UITableViewCellUITableView做出不同的處理。背後的原因很簡單。每次加載xib時,都會創建xib中的所有視圖。每次創建單元格時都不需要新的表格。對?

至於你面臨的崩潰。該錯誤看起來像名稱tableView有一個插座問題。嘗試刪除網點,並重新初始化它們

附加

UICollectionView,你可以註冊一個類,它會載入廈門國際銀行從您的視圖。

[self.collectinView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cellIdentifier] 

更新

如果您使用的是故事板,你可以添加兩個原型細胞,將在的tableview中添加兩個單元。你可以在那裏添加所有的視圖,並給他們不同的類文件。會減少你需要維護的xib文件的數量,也不需要註冊你的nib。這可能是一個tutorial

+0

我非常失望地說:如果我將視圖分隔成不同的XIB文件,它確實有效。這並不是我想要的。讓我們看看是否有更好的答案。另外,請確認此方法是否適用於collectionView? – Eddie

+0

關於更好的答案,我不知道......但我覺得這是最正確的一個......你不能在xib中有兩個視圖,從內存使用的角度來看它是無效的 –