2013-07-08 88 views
0

我認爲這是NSTextField自動響應左右箭頭鍵的缺省行爲。不幸的是,在我的應用程序中,這不會發生。有沒有可以打開這個行爲的選項,還是我必須自己添加它?NSTextField箭頭鍵不會移動插入符

爲了進一步解釋,接口是動態生成的。我有視圖(包含NSTextFields的xibs)以及我在另一個視圖上手動堆疊的視圖控制器。當創建一個視圖(即,它的控制器(NewView的))我使用此代碼,將其添加到我的NSBox的內容查看(boxContent):

[boxContent addSubview:[newView view]]; 
[newView setWithLabel:attributeLabel forProperty:attribute]; 
newViewY -= [[newView view] frame].size.height; 
[[newView view] setFrameOrigin:NSMakePoint(0, newViewY)]; 
newViewY -=padding; 

奇怪的是,文本輸入,而其他按鍵退格工作(箭頭,刪除)不。

這可能是NSResponder鏈的問題嗎?爲什麼文本輸入工作呢?

+1

您是否已將它作爲第一個響應者,無論是在IB(Xcode)還是編程方式? – trudyscousin

+0

聽起來很奇怪!我從來不需要做任何事情來獲得這些功能。 – d00dle

回答

0

所以,我不知道這些問題的原因是什麼,但這是我所做的迂迴解決方案。

我創建了一個NSTextField的子類,它將命令(選擇器)發送到它的NSTextView。的NSTextField有一子視圖和子視圖還有另一個子視圖,實際上是NSTextView:

NSTextView* textView = nil;  
NSArray* subs = [self subviews]; 
if(subs && [subs count] > 0){ 
    NSView* firstView = [subs objectAtIndex:0]; 
    NSArray* firstSubs = [firstView subviews]; 
    if (firstSubs && [firstSubs count] > 0) {  
     textView = [firstSubs objectAtIndex:0]; 
    } 
} 

當我初始化一個(如果有人知道此子視圖搜索不是一個更好的辦法,請告訴),我給它發送命令它應該得到:

-(void)keyUp:(NSEvent *)theEvent{ 
    BOOL isShift = (theEvent.modifierFlags & NSShiftKeyMask) > 0; 
    BOOL isCommand = (theEvent.modifierFlags & NSCommandKeyMask) > 0; 
    switch (theEvent.keyCode) { 
     case 7: if(isCommand && !isShift) [self notifyTextView:@selector(cut:)]; break; 
     case 8: if(isCommand && !isShift) [self notifyTextView:@selector(copy:)]; break; 
     case 9: if(isCommand && !isShift) [self notifyTextView:@selector(paste:)]; break; 
     case 123: [self notifyTextView:isShift ? @selector(moveLeftAndModifySelection:) : @selector(moveLeft:)];break; 
     case 124: [self notifyTextView:isShift ? @selector(moveRightAndModifySelection:) :@selector(moveRight:)];break; 
     case 117: [self notifyTextView:@selector(deleteForward:)];break; 
     default: break; 
    } 
    [super keyUp:theEvent]; 
} 

可能不是最完美的解決方案,但它工作(直到我找出了問題擺在首位)。