2012-07-31 29 views
9

Tôi có Chế độ xem tùy chỉnh NSView và tôi muốn vô hiệu hóa tương tác người dùng, nhưng tôi không chắc chắn cách thực hiện điều này.Cách tắt tương tác người dùng trong Chế độ xem tùy chỉnh

Ý tưởng của tôi là:

[myView setEnabled:NO]; 

nhưng đó là sai lầm và không hoạt động. Làm thế nào tôi có thể làm cho nó để nó, nó chỉ hiển thị cho người dùng, và không có gì khác?

+0

thử [MyView setUserInteractionEnabled: NO]; –

+4

@CodersParadise: câu hỏi này là về OS X chứ không phải iOS. Không có thuộc tính hoặc phương thức như vậy trên 'NSView' ... – NSGod

Trả lời

4

Từ here:

// 
// NSView-DisableSubsAdditions.m 
// Can Combine Icons 
// 
// Created by David Remahl on Tue Dec 25 2001. 
// Copyright (c) 2001 Infinity-to-the-Power-of-Infinity. All rights reserved. 
// 

#import "NSView-DisableSubsAdditions.h" 

@implementation NSView(DisableSubsAdditions) 

- (void)disableSubViews 
{ 
    [self setSubViewsEnabled:NO]; 
} 

- (void)enableSubViews 
{ 
    [self setSubViewsEnabled:YES]; 
} 

- (void)setSubViewsEnabled:(BOOL)enabled 
{ 
    NSView* currentView = NULL; 
    NSEnumerator* viewEnumerator = [[self subviews] objectEnumerator]; 

    while(currentView = [viewEnumerator nextObject]) 
    { 
     if([currentView respondsToSelector:@selector(setEnabled:)]) 
     { 
      [(NSControl*)currentView setEnabled:enabled]; 
     } 
     [currentView setSubViewsEnabled:enabled]; 

     [currentView display]; 
    } 
} 

@end 
8

NSView không có một trong hai setEnabled: hoặc setIgnoresMouseEvents:

Thực hiện the hitTest: method trở nil.

+0

Tôi thích giải pháp này. Đơn giản để thực hiện và cách mạnh mẽ hơn và đáng tin cậy hơn là vô hiệu hóa các subviews nếu chúng được điều khiển. – DarkDust

+0

Giải pháp này là hoàn hảo – jimwan

+0

Điều này đã không làm việc cho tôi cả. Triển khai mouseDown: không có gì là giải pháp trong trường hợp của tôi. – ghr

2

lớp con các NSView và thêm phương pháp sau đây

-(void)mouseDown:(NSEvent *)theEvent 
{ 

} 
+0

Hoàn hảo. hitTest: return nil không làm việc cho tôi chút nào - nó dường như ngăn chặn mouseDown được gọi. Vì vậy, chỉ cần sử dụng một mouseDown trống: – ghr

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