9

2列NSTableViewのコンテンツタイプがあります。View Based

私のオブジェクトは次のように構成されています。

Table View
    Table Column
        Table Cell View
            Text Field
    Table Column
        Table Cell View
            Popup Button

選択した行について、特定の列の選択した行内の要素を取得したいと思います。Text Field具体的には、選択した行の最初の列でを取得したいと思います。

テーブルビューへのアウトレットがあり、これまでに選択した行のインデックスがありますが、それだけです。

- (void)getSelectedTextField
{
    NSInteger selected = [tableView selectedRow];
}

この問題に取り組む方法について何かアイデアはありますか?

編集:これは私がやろうとしていることです:テキストフィールドを編集状態に変更してそれに焦点を合わせ、ユーザーがテキストフィールドの値を選択するとすぐに編集を開始できるようにします

4

3 に答える 3

22

私は自分の問題を解決したようです:

- (void)getSelectedTextField
{
    NSInteger selected = [tableView selectedRow];

    // Get row at specified index
    NSTableCellView *selectedRow = [tableView viewAtColumn:0 row:selected makeIfNecessary:YES];

    // Get row's text field
    NSTextField *selectedRowTextField = [selectedRow textField];

    // Focus on text field to make it auto-editable
    [[self window] makeFirstResponder:selectedRowTextField];

    // Set the keyboard carat to the beginning of the text field
    [[selectedRowTextField currentEditor] setSelectedRange:NSMakeRange(0, 0)];
}
于 2012-10-11T22:08:06.733 に答える
5

サブビューを取得することで、テーブル ビュー セルのすべての要素を取得できます。使用する前に、ログ リストのサブビューを表示することをお勧めします

NSInteger index = [self.tableViewFiles selectedRow];

// Get row at specified index of column 0 ( We just have 1 column)
NSTableCellView *cellView = [self.tableViewFiles viewAtColumn:0 row:index makeIfNecessary:YES];

// Get row's checkBox ( at index 0, textFields is 1,2)
NSButton *checkBox = [[cellView subviews] objectAtIndex:0];
于 2015-11-12T10:21:03.377 に答える
0

テキストフィールドがテーブルビューセルの唯一のサブビューである場合は、次のコードでそのテキストフィールドへの参照を取得し、そのテキストを選択して、編集の準備を整えることができます。

-(void)tableViewSelectionDidChange:(NSNotification *)notification {
   NSInteger row = [notification.object selectedRow];
   NSTextField *tf = [[[notification.object viewAtColumn:0 row:row makeIfNecessary:NO]subviews] lastObject];
   [tf selectText:tf.stringValue];
}
于 2012-10-11T21:46:38.920 に答える