2011-03-08 3 views

답변

0

단일 클릭이 이상적이라고 생각하지 않습니다. 한 번 클릭하여 선택하고 두 번 클릭하면 기본 작업이 수행됩니다.

+8

, 그것은이다 좋은 생각. – Lucidus

3

단일 클릭 동작을 구현하는 한 가지 방법은 setAction 메서드를 오버라이드하는 것입니다.

SingleClickAppDelegate.h을

#import <Cocoa/Cocoa.h> 

@interface SingleClickAppDelegate : NSObject <NSApplicationDelegate> 
{ 
    IBOutlet NSTableView *theTable; 
    IBOutlet NSArrayController *theArrayController; 

    NSInteger colNumber; 
} 

- (void)addRow; 
- (void)doClickEdit: (id)sender; 

@end 

SingleClickAppDelegate.m

#import "SingleClickAppDelegate.h" 

@implementation SingleClickAppDelegate 

- (void)awakeFromNib 
{ 
    [self addRow]; 
    [self addRow]; 
    [self addRow]; 

    [theTable setTarget:self]; 

    /// Single click action 
    [theTable setAction:@selector(doClickEdit:)]; 
} 

/// Add some temporary data to edit 
- (void)addRow 
{ 
    NSMutableDictionary *values = [[NSMutableDictionary alloc] init]; 

    [values setObject:[NSNumber numberWithLong:colNumber++] forKey:@"col1"]; 
    [values setObject:@"Text" forKey:@"col2"]; 

    [theArrayController addObject:values]; 

    [values release]; 

    [theTable reloadData]; 
} 

/// Action 
- (void)doClickEdit: (id)sender 
{ 
    NSLog(@"doClickEdit:"); 
    NSInteger row = [theTable clickedRow]; 
    [theTable editColumn:1 row:row withEvent:nil select:YES]; 
} 

@end 
을 다음은, 사용자가 한 번 클릭하여 테이블의 모든 행에서 하나 개의 열을 편집 할 수 NSTableView는 위해 그 일 예는

이제 인터페이스 빌더에 바인딩합니다

  • 는 CIA 요원의 개체 만들기 ss SingleClickAppDelegate은 위의 코드를 GUI와 인터페이스합니다.
  • NSTableView를 만들고 theTable에 바인딩합니다.
  • NSTableView 데이터 소스대표단SingleClickAppDelegate에 바인드합니다.
  • NSArrayController를 만들고 theArrayController에 바인딩하십시오. 테이블의 각 컬럼에 대한
  • : theArrayController
  • 그 값 바인딩
    • 는 arrangedObjects에 컨트롤러 키을 설정합니다.
    • 지금있는 테이블이 있어야한다,

프로젝트를 저장합니다 (이 예에서 "이 COL1"와 "COL2"입니다) 위의 각 키에 모델 키 경로을 설정하고 컴파일 일부 행. 행을 클릭하면 두 번째 열을 편집 할 수 있습니다.

행의 아무 곳이나 선택하면 항상 doClickEdit:에 설정된 열을 편집합니다.

2

한 번의 클릭 동작은

- (void)editColumn:(NSInteger)columnIndex 
       row:(NSInteger)rowIndex 
     withEvent:(NSEvent *)theEven 
      select:(BOOL)flag 
0

내가 가장 우아한 옵션은 다음과 같이 NSTableView는 하위 클래스라고 생각 특정 셀에 대한 TableView 호출이 방법으로 호출 될 때 :

myNSTableView.h

#import <Cocoa/Cocoa.h> 
@interface myNSTableView : NSTableView { 

} 
- (void)singleClickEdit: (id)sender; 
@end 

myNSTableView.NSView의에 넣어왔다 NSTableView는 그래픽 객체를 선택, IB에서

#import <Cocoa/Cocoa.h> 
#import "myNSTableView.h" 

@interface Preference : NSPanel { 
    NSMutableArray    *chargeArray; // Array of ChargeDefault objects 
    IBOutlet myNSTableView *chargeTableView; 
} 

대신 NSTableView는의

#import "myNSTableView.h" 
@implementation myNSTableView 

- (void)awakeFromNib 
{ 
    [self setAction:@selector(singleClickEdit:)]; 
} 

- (void)singleClickEdit: (id)sender 
{ 
    NSLog(@"singleClickEdit:"); 
    [self editColumn:[self clickedColumn] row:[self clickedRow] withEvent:nil select:NO]; 
} 

@end 

, m는 myNSTableview 클래스, 즉를 사용합니다. "Indentity Inspector"탭을 선택하고 NSTableView 대신 myNSTableView를 선택하십시오.

모든 작업이 완료되었습니다.

0

NSTableView를 서브 클래 싱하는 대신 카테 고리를 만들면됩니다. (해당하는 .m 파일에 다음

@interface NSTableView(OneClickEdit) 
- (void)singleClickEdit: (id)sender; 
@end 

@interface MyViewController : NSViewController 
{ 
    IBOutlet NSTableView *tableView; 
... 

:보기 컨트롤러 (MyViewController.h 또는 테이블 뷰에 연결 함께 IBOutlet을 가진 파일)의 헤더 파일에서 , 새로운 cathegory 선언 MyViewController.m가) MyViewController 구현 자체의 외부 cathegory의 구현을 추가하고 뷰 컨트롤러의 viewDidLoad에에 그 새로운 방법을 테이블보기의 작용 방법을 : 어떤 경우

@implementation NSTableView(OneClickEdit) 
- (void)singleClickEdit: (id)sender 
{ 
    [self editColumn:[self clickedColumn] row:[self clickedRow] withEvent:nil select:YES]; 
} 
@end 
@implementation MyViewContoller 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [tableView setAction:@selector(singleClickEdit:)]; 
.... 
관련 문제