2009-03-26 20 views
5

Tôi đang cố gắng trả lời click trong một số textfield. Khi nhấp chuột xảy ra, tôi sẽ mở một panel. suy nghĩ ban đầu của tôi là sử dụng một phương pháp delegate để đáp ứng các sự kiện click - nhưng tôi phát hiện ra rằng:Tôi nên sử dụng phương pháp đại biểu nào để phản hồi các nhấp chuột trên NSTextField?

Phương pháp này không làm việc:

(void)textDidBeginEditing:(NSNotification *)aNotification 

Phương pháp này không làm việc, nhưng chỉ khi tôi thực sự chỉnh sửa văn bản trong trường văn bản, không phải khi tôi nhấp vào văn bản lần đầu tiên. Và - nếu tôi chỉnh sửa văn bản lần thứ hai, phương pháp này ngừng hoạt động:

(void)controlTextDidBeginEditing:(NSNotification *)aNotification 

tôi có thể sử dụng càng nhiều chi tiết càng tốt - hoặc một ví dụ mã, lý tưởng. Tôi biết rằng số tiền nstextfield được kế thừa từ NSControl, trong đó có sự kiện mouseDown. Có cách nào tương tự để phản hồi sự kiện với số textfield không?

+0

Bản sao của: http://stackoverflow.com/questions/680863/which-delegate-method-i-should-use-to-respond-to-clicks-on-a-text-field – Darron

+0

Tôi đồng ý với bạn , nhưng đọc câu hỏi khác, có vẻ như không phải vậy. Đây là một câu hỏi của Mac; khác là một câu hỏi iPhone. –

+0

Có, tôi nghĩ rằng đây là câu hỏi của tôi, tôi đặt nó vị trí lỗi before.sorry! – jin

Trả lời

10

Kể từ khi NSTextField được thừa kế từ lớp NSControl, nó cũng thừa hưởng phương pháp -(void)mouseDown:(NSEvent*) theEvent.

+0

Tôi thấy rằng nstextfield kế thừa từ lớp NSControl, tôi cũng thấy rằng lớp NSController có phương thức mouseDown, nhưng tôi không biết cách sử dụng nó trong tệp của mình, Cảm ơn rất nhiều. – jin

+0

Bạn chỉ có thể ghi đè lên các sự kiện mouseDown trong lớp NSTextField, như sau: @implementation NSTextField - (void) mouseDown: (NSEvent *) theEvent { // mã của bạn ở đây } @end – locriani

+1

trọng mouseDown: là không đủ cho NSTextField có thể chỉnh sửa, như một khi trình soạn thảo trường (một NSTextView *) được kích hoạt trong trường văn bản, nó là "phía trước" và nó nhận được mouseDown: các sự kiện! Vì vậy, mouseDown: sẽ làm việc một lần, nhưng không nhiều lần trong một hàng ... Và ghi đè mouseDown: trong trình chỉnh sửa trường * rất * khéo léo. – Altimac

8

Tôi cần có một hàm NSTextField gọi hàm đại biểu sau khi nhấp vào ngày hôm nay và cho rằng mã cơ bản này có thể hữu ích. Lưu ý rằng NSTextField đã có một đại biểu và trong SDK v10.6, đại biểu đã có giao thức liên kết với nó. Lưu ý rằng nếu bạn không quan tâm về giao thức, cảnh báo trình biên dịch, v.v., bạn không cần giao thức và thuộc tính khai báo hoặc getter và setter.

MouseDownTextField.h: 

#import <Appkit/Appkit.h> 
@class MouseDownTextField; 

@protocol MouseDownTextFieldDelegate <NSTextFieldDelegate> 
-(void) mouseDownTextFieldClicked:(MouseDownTextField *)textField; 
@end 

@interface MouseDownTextField: NSTextField { 
} 
@property(assign) id<MouseDownTextFieldDelegate> delegate; 
@end 

MouseDownTextField.m: 
#import "MouseDownTextField.h" 

@implementation MouseDownTextField 
-(void)mouseDown:(NSEvent *)event { 
    [self.delegate mouseDownTextFieldClicked:self]; 
} 

-(void)setDelegate:(id<MouseDownTextFieldDelegate>)delegate { 
    [super setDelegate:delegate]; 
} 

-(id)delegate { 
    return [super delegate]; 
} 

AppDelegate.h: 
@interface AppDelegate <MouseDownTextFieldDelegate> 
... 
@property IBOutlet MouseDownTextField *textField; 
... 

AppDelegate.m: 
... 
    self.textField.delegate = self; 
... 
-(void)mouseDownTextFieldClicked:(MouseDownTextField *)textField { 
    NSLog(@"Clicked"); 
    ... 
} 
... 

Nếu bạn đang xây dựng với 10.5 SDK, không có giao thức kế thừa từ NSTextFieldDelegate.

Các vấn đề liên quan