2015-10-26 5 views
10

ビューベースのNSTableViewのセルとしてカスタムビューを使用すると、カスタムビューはテーブルの行の多少下になります。クリックすると、要素(テキストフィールドなど)のカスタム表示に影響する代わりに、表の行が選択(強調表示)されました。私はテキストフィールドを選択するためにreclickする必要があります。NSTableViewでテーブル行の上にカスタムビューセルを表示するにはどうすればいいですか?

- (NSView*)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    NSLog(@"We are creating views!"); 
    NSTableCellView *newView; 
    newView = [tableView makeViewWithIdentifier:@"PostCell" owner:self]; 


    NSTextField *newTextField = [[NSTextField alloc] init]; 
    [newView addSubview:newTextField]; 

    return newView; 
} 

highlights the front

IはNSTableView - Disable Row Selectionに応じて、行選択を無効にすると、何も選択しませんでした。

- (BOOL)selectionShouldChangeInTableView:(NSTableView *)tableView { 
    return NO; 
} 

しかし、私はまだテキストフィールドを直接選択することはできません。さらに悪いことに、私はマウスでそれを選択することすらできません。キーボードのtabのみが機能します。

Unable to select

それ以上の何かがあるように思われます。しかし、それはインターフェイスビルダーに表示される "テーブルの列"ですか?または、他の何か?

どうすればこの問題を解決できますか?

+0

どのようにUITableViewCellを初期化しますか? 'cell.contentView = customView'?もしそうなら、ビューを '[cell.contentView addSubview:customView]' – blld

+0

@AurélienBouillandの代わりに追加することを考慮する必要があります。そのビュービルダーのカスタムビューをテーブルの列の下にドラッグし、クラスを自分のビューに設定しますクラス、 'NSTableCellView * newView; newView = [テーブルビューmakeViewWithIdentifier:@ "PostCell" owner:self]; '; – Colliot

+0

@AurélienBouilland、その他の詳細については、[他のビューで呼び出されたときにInterface Builderで作成されたカスタムビューがレンダリングされない]を参照してください(http://stackoverflow.com/questions/33329280/custom-view-created-with-interface-builder -does-not-render-when-called-other)。 – Colliot

答えて

4

NSTableViewのカスタムサブクラスを使用し、-validateProposedFirstResponder:forEvent:をオーバーライドしてYESを返します。

ビューベースのテーブルビューコードを作成したAppleのエンジニアのthis blog entryを参照してください。

1

次のコードが存在することを確認してください。

- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex { 
return YES; 
} 

スーパービューを確認するか、ビューのスーパービューを確認できます。 これは、ビュー階層を理解するのに役立ちます。

また、ビューのuserInteractionの1つが無効になっている場合、サブビューのイベントを受け取ることができません。すべてのビューとそのサブビューuserInteractionが有効であることを確認してください。

こちらがお役に立てば幸いです。

関連する問題