2011-09-24 76 views
4

我有一個NSTableView。在編輯時,如果我點擊標籤,它會自動跳轉到下一列。這太棒了,但是當我編輯最後一列中的字段並且我點擊標籤時,我想要專注地跳到下一行的第一列。NSTableView打標籤在編輯時從一排跳到另一排

有什麼建議嗎?

感謝邁克爾的起始代碼,它非常接近結束了工作!下面是我用最後的代碼,希望這會有所幫助別人:

- (void) textDidEndEditing: (NSNotification *) notification { 
    NSInteger editedColumn = [self editedColumn]; 
    NSInteger editedRow = [self editedRow]; 
    NSInteger lastColumn = [[self tableColumns] count] - 1; 

    NSDictionary *userInfo = [notification userInfo]; 

    int textMovement = [[userInfo valueForKey:@"NSTextMovement"] intValue]; 

    [super textDidEndEditing: notification]; 

    if ((editedColumn == lastColumn) 
     && (textMovement == NSTabTextMovement) 
     && editedRow < ([self numberOfRows] - 1) 
     ) 
    { 
     // the tab key was hit while in the last column, 
     // so go to the left most cell in the next row 
     [self selectRowIndexes:[NSIndexSet indexSetWithIndex:(editedRow+1)] byExtendingSelection:NO]; 
     [self editColumn: 0 row: (editedRow + 1) withEvent: nil select: YES]; 
    } 

} 
+0

我沒有看到你在這裏發佈了修改的代碼。太好了!正如我在下面所問,任何想法如何使用最右邊一列中的按鈕單元格來調整這個表格? – paulmelnikow

+0

如果您希望TabB跳過該列,只需將lastColumn更改爲count - 2.如果您希望選項卡跳轉到該按鈕......我不確定。我從來沒有處理過。 –

+0

選項卡已經停在那裏(這是在系統偏好設置中設置的)。當我選中它時,我想進入下一行。 – paulmelnikow

回答

1

子類的UITableView並添加代碼來捕獲textDidEndEditing電話。

然後,您可以決定基於這樣的事情什麼:

- (void) textDidEndEditing: (NSNotification *) notification 
{ 
    NSDictionary *userInfo = [notification userInfo]; 

    int textMovement = [[userInfo valueForKey:@"NSTextMovement"] intValue]; 

    if ([self selectedColumn] == ([[self tableColumns] count] - 1)) 
     (textMovement == NSTabTextMovement) 
    { 
     // the tab key was hit while in the last column, 
     // so go to the left most cell in the next row 
     [yourTableView editColumn: 0 row: ([self selectedRow] + 1) withEvent: nil select: YES]; 
    } 

    [super textDidEndEditing: notification]; 
    [[self window] makeFirstResponder:self]; 

} // textDidEndEditing 

此代碼是沒有測試......任何保證......等等,你可能需要移動[超級textDidEndEditing :]要求選中最右側單元格的情況。但希望這會幫助你到終點線。讓我知道!

+0

任何想法如何使用最右邊的列中的按鈕單元格將其調整爲表格視圖?當它失去焦點時,沒有對textDidEndEditing的調用。 – paulmelnikow

2

您可以通過實現這樣做沒有子control:textView:doCommandBySelector:

-(BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector { 

    if(commandSelector == @selector(insertTab:)) { 
     // Do your thing 
     return YES; 
    } else { 
     return NO; 
    } 
} 

(該NSTableViewDelegate實現NSControlTextEditingDelegate協議,這是在定義此方法)

這種方法響應實際的按鍵,讓你'不受限於textDidEndEditing方法,該方法僅適用於文本單元格。