私のUI構造はNSWindow - > NSViewController - > NSView(親) - > NSView(ターゲットビュー)のようなものです。 ターゲットビューがaddSubview
ではなくXIBファイルからドラッグされます。 drawRect
関数は、NSView(親)が表示されているときに呼び出されますが、その後、setNeedsDisplay
を使用してプログラムでdrawRectを再度呼び出すと機能しません。 私の方法には何が問題なのですか?drawRectはsetNeedsDisplayで呼び出されません
とにかく、これを実装するのにdrawRect(view.frame)を使うことができますが、これは良い考えではないと思います。
コード:
MyView.m
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
NSLog(@"asasa");
}
...
@property (weak) IBOutlet MyView *titleBarView;
...
-(IBAction)test:(id)sender
{
NSLog(@"%@",self.view.subviews); // contains the titleBarView
NSLog(@"%@",self.titleBarView); // not nil
[self.titleBarView setNeedsDisplay:YES]; // not call drawRect
}
titleBarViewがすでにself.view
self.titleBarView
のdrawRect:
をトリガしませんが、今やっていること
あなたはターゲットビューの 'setNeedsDisplay'を呼び出しますか? – bluedome
@bluedome、はい、私はsetNeedsDisplayを呼び出しましたが、動作しません – jimwan
'setNeedsDisplay:'を呼び出すコードを表示します。また、あなたがあなたがいると思うビューでそれを呼んでいると確信していますか?そのビュー、親またはターゲットはどのビューですか?何か(コンセントなど)を正しく接続していないため、そのビューへの参照が「なし」になることはありますか? 'drawRect'を呼び出さないでください。それは正しく動作しません。 –