1

この投稿に投稿された2番目の回答をここに実装してみました。質問者としての希望がありますが、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の[ユーザー補助]で、[ユーザーインタラクションが有効]がオンになっていることを確認してNSTextFieldください。

フォローアップの質問については、どうすればこれらを複数持つことができますか?

IBに複数のインスタンスを追加するNSTextField場合、quoteHolderの場合と同様に、それぞれが@propertyとして参照されます。リンクは、このリンクされた回答のようにIBで行われます。

これらはすべて同じデリゲートを持つことができます。がmouseDownTextFieldClicked:押されるNSTextFieldと、IBでも割り当てることができる一意のIDを問い合わせることができます。お役に立てれば。

于 2013-01-03T02:46:03.577 に答える