2015-06-10 16 views
6

Tôi đang tìm hiểu về NSControl. Tôi biết rằng NSCell đã bắt đầu con đường không dùng nữa trong OS X 10,10 Yosemite và vì vậy tôi không muốn sử dụng API sắp biến mất. Ngoài ra, Tham chiếu lớp NSControl cho thấy tất cả các trình truy cập ô bị từ chối.Trong OS X 10.10, tôi có thể triển khai NSControl không có NSCell không?

Tôi hiểu tất cả điều này, nhưng điều không rõ ràng là những gì khóa học được khuyến nghị dành cho những người viết NSControl lớp con trên 10.10. Tất cả các hướng dẫn của Apple về chủ đề này không đề cập đến việc không dùng nữa của NSCell. Tôi cho rằng tôi chỉ có thể làm mọi thứ theo cách cũ, nhưng sau đó tôi cần phải thay đổi mã của mình khi Apple tiến hành việc ngừng sử dụng số NSCell lên cấp độ tiếp theo.

Thậm chí có thể triển khai lớp con NSControl mà không sử dụng NSCell không?

Có ai có thể tư vấn hoặc liên kết tôi với tài nguyên về chủ đề này không? Điều này chứng tỏ khó khăn đối với google.

Trả lời

3

Tôi cũng đang cố gắng làm việc này. Tôi không may không thể trả lời tất cả các câu hỏi của bạn, nhưng đây là những gì tôi đã tìm thấy cho đến nay.

AppKit Release Notes for OS X v10.10 có giải thích ngắn gọn về những gì đang diễn ra, mà tôi đã thấy ban đầu trong câu hỏi How to create a custom themed NSButton without subclassing NSButtonCell?.

deprecation dần của NSCell

Mac OS X 10.10 mất một bước hướng tới việc không dùng cuối cùng của tế bào. Truy cập trực tiếp vào ô kiểm soát không được khuyến khích và các phương thức cho phép nó sẽ không được chấp nhận chính thức trong bản phát hành tiếp theo. Một loạt các API cấp ô được nâng cấp lên các lớp con khác nhau Kiểm soát để cung cấp quyền truy cập không có chức năng vào chức năng quan trọng . NSLevelIndicator, NSTextField, NSSearchField, NSSlider, và NSPathControl đều có các thuộc tính mới cho mục đích này. Dựa trên ô NSTableViews hiện không còn được dùng nữa và NSTableViews dựa trên chế độ xem phải được sử dụng thay thế cho lần lượt . Các NSBrowser dựa trên ma trận cũng bị phản đối vì lợi ích của giao diện dựa trên mặt hàng.

Tài liệu 10.10 có nhiều phương pháp NSControl bị gạch chéo màu đỏ. (Nhân tiện, tôi không chắc chắn nếu điều này rõ ràng có nghĩa là "không được chấp nhận".)

Dấu hiệu tài liệu cho continuousenabled là gây hiểu lầm. Tôi đã nhìn qua các tập tin tiêu đề cho NSControl tại tờ khai được gạch chéo trong các tài liệu và hình như vẫn có một vài điều khác nhau xảy ra:

  1. Phương pháp này bị phản đối với NS_DEPRECATED_MAC:

    // Use formatters instead. See -[NSControl formatter] and -[NSControl setFormatter:]. 
    - (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits NS_DEPRECATED_MAC(10_0, 10_0); 
    
  2. Những phương pháp này xuất hiện trong một thể loại NSDeprecated:

    @interface NSControl (NSDeprecated) 
    
    // Use formatters instead. See -[NSControl formatter] and -[NSControl setFormatter:]. 
    - (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits NS_DEPRECATED_MAC(10_0, 10_0); 
    
    + (void)setCellClass:(Class)factoryId; 
    + (Class)cellClass; 
    
    - (id)cell; 
    - (void)setCell:(NSCell *)aCell; 
    - (id)selectedCell; 
    - (NSInteger)selectedTag; 
    
    - (void)setNeedsDisplay; // Use setNeedsDisplay:YES instead. 
    - (void)calcSize; 
    
    - (void)updateCell:(NSCell *)aCell; 
    - (void)updateCellInside:(NSCell *)aCell; 
    - (void)drawCellInside:(NSCell *)aCell; 
    - (void)drawCell:(NSCell *)aCell; 
    - (void)selectCell:(NSCell *)aCell; 
    
    @end 
    
  3. Những phương pháp ứng dụng tai trong tài liệu là "Có sẵn trong OS X v10.8 thông qua OS X v10.9" , nhưng không phải trong file header NSControl, vì vậy tôi cho rằng họ đã bị loại bỏ hoàn toàn.

    -userInterfaceLayoutDirection 
    -setUserInterfaceLayoutDirection 
    
  4. Những tờ khai được các phương pháp trước đây, nhưng đã được refactored vào tính Xem this answer để biết chi tiết về những gì đã xảy ra với . các isEnabled/phương pháp setEnabled Vì vậy, các tờ khai được gạch chéo trong các tài liệu, nhưng điều này là sai lầm:

    @property (getter=isContinuous) BOOL continuous; 
    @property (getter=isEnabled) BOOL enabled; 
    

tôi đã không tìm thấy bất kỳ thông tin hữu ích về cách tạo một lớp con NSControl mà không có cũng creati ng an NSCell phân lớp, mặc dù rõ ràng là NSColorWell là ô ít hơn NSControl.

Kết luận thô hiện tại của tôi là NSControl được kết hợp khá mạnh mẽ với NSCell và không hợp lý để sử dụng cái này mà không có người khác. Vì vậy, tôi đang xem xét việc viết một lớp con NSView thay thế.

Tôi cũng đánh giá cao thông tin và lời khuyên tại đây!

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