1

我尝试在此处实施此帖子中发布的第二个答案我有作为提出问题的人的愿望,但是我mouseDown没有工作/注册。这就是我所拥有的。

  1. AppDelegate.h
  2. AppDelegate.m
  3. MouseDownTextField.h
  4. MouseDownTextField.m

并有相关内容:

  1. AppDelegate.h

    #import <Cocoa/Cocoa.h>
    #import "MouseDownTextField.h"
    @interface AppDelegate : NSObject <MouseDownTextFieldDelegate> {
    NSWindow *window;
    IBOutlet NSMenu *statusMenu;
    NSStatusItem *statusItem;
    NSMutableArray *selector;
    NSMutableArray *display;
    NSTimer *timer;
    MouseDownTextField *quoteHolder; }
    @property IBOutlet MouseDownTextField *quoteHolder;
    @end
    
  2. AppDelegate.m

    - (void)displayString:(NSString *)title {
      NSRect frame = NSMakeRect(50, 0, 200, 17);
      quoteHolder = [[MouseDownTextField alloc] initWithFrame:frame];
      [[self quoteHolder] setDelegate:self];
      [quoteHolder setStringValue:title];
      [quoteHolder setTextColor:[NSColor blueColor]];
      [test addSubview:quoteHolder];
      [statusItem setView:test]; }
      -(void)mouseDownTextFieldClicked:(MouseDownTextField *)textField {
         NSLog(@"Clicked");}
    
  3. 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
    
  4. 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]; }
    @end
    

关于可能是错的或我做错了什么的想法?

4

1 回答 1

1

您正在 IB 中创建 quoteHolder,您应该删除以下代码行,您应该没问题。

quoteHolder = [[MouseDownTextField alloc] initWithFrame:frame];

重新分配的结果NSTextField是您单击的那个不再是在代理中注册的那个。也不需要添加它subview,它已经添加到 IB 中的视图层次结构中。

此外,请确保在 IB 中,在 Accessibility 下,为NSTextField.

至于后续问题,你怎么会有多个?

如果您NSTextField在 IB 中添加多个实例,每个实例都将被引用为 @property,就像您对 quoteHolder 所做的那样。链接是在 IB 中完成的,就像这个链接的答案一样。

这些都可以有相同的代表。按下时mouseDownTextFieldClicked:,您可以查询NSTextField一个唯一的 ID,该 ID 也可以在 IB 中分配。希望这可以帮助。

于 2013-01-03T02:46:03.577 回答