2014-10-04 37 views
1

我在我的應用程序中有一個NSTableView,我在用戶在NSTextField中鍵入字母后加載數據。NSTableView委託不工作/不填充單元格

這裏是我的NSTableView的委託方法

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { 
    NSLog(@"%lu rows!", (unsigned long)contactsArr.count); 
    return contactsArr.count; 
} 
-(NSInteger)numberOfColumns:(NSTableView *)tableView { 
    return 1; 
} 

-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 

    NSLog(@"filling tableview yo"); 

    NSTableCellView *result = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self]; 

    NSButton *nameField = [result viewWithTag:10]; 

    NSButton *numberField = [result viewWithTag:20]; 

    ABPerson *indexedPerson = contactsArr[row]; 

    [nameField setStringValue:[NSString stringWithFormat:@"%@ %@",[indexedPerson valueForKey:kABFirstNameProperty] 
           ,[indexedPerson valueForKey:kABLastNameProperty]]]; 

    [numberField setStringValue:[NSString stringWithFormat:@"%@",[indexedPerson valueForKey:kABPhoneProperty]]]; 


    if (result == nil) { 

     result = [[NSTableCellView alloc] initWithFrame:CGRectMake(0, 0, 267, 52)]; 

     result.identifier = @"cell"; 
    } 

    return result; 

} 

我已經檢查了我的委託和數據源都設置爲此類。我也確定我的插座是安裝好的。當用戶在鍵盤上輸入某些東西時,我將NSMutableArray重置爲搜索結果,並記錄數組中實際存在ABPerson對象的事實。問題是沒有單元格出現在屏幕上。 viewForTableColumn方法有時只運行。 reloadData根本不起作用。

回答

1

你有點反感,首先要做的是在填充之前檢查NSTableviewCell是否爲空。

否則,你將在委託方法結束時創建一個新的細胞,並返回他們的空白

-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
    NSLog(@"filling tableview yo"); 
    NSTableCellView *result = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self]; 

    if (result == nil) { 
     result = [[NSTableCellView alloc] initWithFrame:CGRectMake(0, 0, 267, 52)]; 
     result.identifier = @"cell"; 
    } 

    NSButton *nameField = [result viewWithTag:10]; 
    NSButton *numberField = [result viewWithTag:20]; 
    ABPerson *indexedPerson = contactsArr[row]; 

    [nameField setStringValue:[NSString stringWithFormat:@"%@ %@",[indexedPerson valueForKey:kABFirstNameProperty] 
           ,[indexedPerson valueForKey:kABLastNameProperty]]]; 

    [numberField setStringValue:[NSString stringWithFormat:@"%@",[indexedPerson valueForKey:kABPhoneProperty]]]; 

    return result; 
} 


編輯:

我加了一個版本的自定義單元格,我發現它更乾淨,然後使用視圖標籤,每次你需要定製超出基本的單元格時,你會更好地分類NSTableViewCell。並且不需要檢查是否有空值,請確保分配標識符

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 

    NSLog(@"filling tableview yo"); 
    PersonTableCellView *cellView = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self]; 

    // Just in Case you got multiple columns 
    if([tableColumn.identifier isEqualToString:@"cell"]) 
    { 
     ABPerson *indexedPerson = contactsArr[row]; 
     NSString *nameInfo = [NSString stringWithFormat:@"%@ %@", 
           indexedPerson[kABFirstNameProperty], 
           indexedPerson[kABLastNameProperty]]; 
     NSString *numberInfo = indexedPerson[kABPhoneProperty]; 

     NSLog(@"nameInfo = %@, numberInfo = %@", nameInfo, numberInfo); 
     //set the strings 
     cellView.nameField.stringValue = indexedPerson 
     cellView.numberField.stringValue = bugDoc.data.title; 

     return cellView; 
    } 
    return cellView; 
} 
+0

非常感謝您解決了一半的問題!現在這些單元格完全是空白的。它加載正確數量的單元格,並且可以滾動瀏覽它們。但他們是完全白色的。單元格中的文本顏色是黑色的,而不是白色,我甚至在viewForTableColumn中將它們編碼爲黑色。 – 2014-10-04 17:33:27