我有一個的NSView與它QTMovieView。我的QTMovieView僅用於顯示電影;我不希望用戶能夠以任何方式與它進行交互。在對如何禁用拖動QTMovieView的令人失望的搜索之後,我遇到了這種解決方法,我在QTMovieView上實現了一個類別。它的目的是覆蓋QTMovieView的鼠標事件,併成功地防止用戶能夠拖動或點擊QTMovieView暫停播放:QTMovieView單擊並拖動打亂鍵盤事件
//QTMovieView+TFOverrideDrag.h
#import <QTKit/QTKit.h>
@interface QTMovieView (TFOverrideDrag)
- (void)mouseDown:(NSEvent *)theEvent;
- (void)mouseDragged:(NSEvent *)theEvent;
- (void)rightMouseDown:(NSEvent *)theEvent;
@end
...
//QTMovieView+TFOverrideDrag.m
#import "QTMovieView+TFOverrideDrag.h"
@implementation QTMovieView (TFOverrideDrag)
- (void)mouseDown:(NSEvent *)theEvent
{
[self.superview becomeFirstResponder];
NSLog(@"MDown");
}
- (void)mouseDragged:(NSEvent *)theEvent
{
[self.superview becomeFirstResponder];
NSLog(@"MDrag");
}
- (void)rightMouseDown:(NSEvent *)theEvent
{
[self.superview becomeFirstResponder];
NSLog(@"RMouse");
}
@end
這可以有效地防止用戶拖動或暫停電影,並且NSLog語句被正確調用。
的問題是,點擊QTMovieView之後,QTMovieView的上海華停止響應鍵盤事件(的keyDown)。這就是爲什麼我將[self.superview becomeFirstResponder];
行包含在每個QTMovieView的重寫類中的方法。這並沒有解決問題。
值得一提的是,QTMovieView的上海華比QTMovieView,其中一些在QTMovieView的頂部被吸引其他子視圖。點擊時,QTMovieView不會引起任何問題,並且程序繼續正常運行。但是,在這種情況下仍然會調用NSLog語句。
我相信,這確實是導致該問題,因爲我已經取出後運行程序QTMovieView,並在該地區的所有點擊不會造成問題。
我的問題歸結爲以下:有沒有人有一個更合理的解決方法不是覆蓋了QTMovieView鼠標事件,以防止用戶交互?如果沒有,有誰知道爲什麼QTMovieView框架內的點擊會導致其超級視圖停止響應鍵盤?或者,如果有一個不同於QTMovieView的類可以使用,我會開放的,儘管我需要利用QTMovieLoopsAttribute,所以任何其他類都需要提供該功能。