2013-02-25 22 views
10

Trong một số phần của ứng dụng của tôi, tôi cần một điều khiển nơi người dùng có thể nhập mật khẩu. Trường mật khẩu an toàn, tuy nhiên tôi muốn người dùng có thể chuyển trường thành văn bản thuần túy và kiểm tra lỗi chính tả, v.v.NSView có thể sử dụng lại từ .xib

Chính trường mật khẩu không có vấn đề gì. Tôi đã phân lớp NSSecureTextField để có được hành vi mà tôi muốn. Tôi làm cho nó bindable, vì vậy tôi có thể chuyển đổi màn hình từ một điều khiển khác (nói, một Checkbox).

enter image description here enter image description here

Bây giờ, tôi muốn sử dụng lại này ở nhiều nơi trong phạm vi ứng dụng của tôi. Tôi chỉ có thể sử dụng trường văn bản an toàn tùy chỉnh của mình cùng với hộp kiểm ở mọi nơi tôi cần. Nhưng tôi muốn nhóm các mảnh này lại với nhau thành một thành phần có thể sử dụng lại được.

Vì vậy, tôi tạo một trang bằng xây dựng giao diện:

enter image description here

Bây giờ, làm thế nào tôi có thể sử dụng trong các cửa sổ khác nhau của tôi? Tôi đã thêm một 'Custom View' thành phần để cửa sổ của tôi, và đặt nó gõ một cách thích hợp:

enter image description here

Nhưng khi chạy, tôi chỉ nhận được một không gian trống rỗng.

1 - Có lẽ vì chế độ xem của tôi được xác định bằng .xib - Tôi cần thực hiện một thứ gì đó trong mã để tải phiên bản PasswordView từ .xib; nhưng chính xác thì tôi cần làm gì? Tôi đang gặp khó khăn khi làm việc này.

Cụ thể:

  • quá trình/API để tải một thể hiện của quan điểm của tôi từ một .xib là gì? Tôi đang đấu tranh để tìm tài liệu về điều này.

  • Khi tôi đã tải một phiên bản của chế độ xem, cách chèn nó vào vị trí của phần giữ chỗ của Chế độ xem tùy chỉnh của tôi? Có lẽ tôi cần một cửa hàng để xem tùy chỉnh của tôi, nhưng sau đó những gì? Tôi chỉ cần gán trường hợp đã tải của mình vào ổ cắm? Tôi có nên thêm nó như là một subview cho các cửa hàng?

  • Logic này nên xảy ra ở đâu? Bên trong init, bên trong AwakeFromNib?

2 - Tôi biết tôi có thể sử dụng một NSViewController để xem tùy chỉnh của tôi (example), và tải nó theo cách đó. Nhưng tôi thực sự cần một bộ điều khiển xem chỉ cho điều này? Có vẻ như tôi chỉ có thể tạo ra những khung nhìn độc lập và nhanh chóng tạo ra chúng một cách dễ dàng ... Nhưng có lẽ đây không phải là cách 'Cocoa'? Dường như với tôi rằng phải có một cách đơn giản để soạn một khung nhìn từ nhiều .xib mà không cần một bộ điều khiển cho mỗi khung nhìn phụ (có thể chỉ là một trường văn bản hoặc một nút), nhưng tôi không tìm thấy nó. ..

Cảm ơn bạn trước.

+0

bạn nói nó, bạn cần có mã để tải NSView của bạn bất cứ khi nào bạn cần nó và đặt nó vào xem ... bạn không thể làm gì với trình tạo giao diện –

+0

@ Daij-Djan cảm ơn bạn, nhưng tôi đã thêm một số chi tiết cụ thể vào câu hỏi của tôi về các điểm gắn bó cụ thể của tôi – TheNextman

+0

Có thể tải tệp .xib từ IB không? – tofutim

Trả lời

0

Nếu tôi nhận được câu hỏi của bạn - Bạn có XIB có cửa sổ chứa passwordTextField và hộp kiểm.

Và bạn muốn cửa sổ xib này tải mọi lúc bạn cần hiển thị trường mật khẩu.


Tôi khuyên bạn không nên tạo cửa sổ, bạn có thể tạo NSView bằng mật khẩuTextField và hộp kiểm.

Và trong tất cả các cửa sổ vẽ chế độ xem trống và bạn có thể tải chế độ xem xib này, do đó, một đối tượng có thể được sử dụng nhiều lần.


EDIT:

Dưới đây là một số mẫu mã như thế nào tôi sử dụng để tải một labelView trên Window chính.

#import "AppDelegate.h" 

@implementation AppDelegate 

@synthesize window = _window; 
@synthesize myLabelViewController; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{ 

    myLabelViewController=[[LabelView alloc] initWithNibName:@"LabelView" bundle:nil]; 
    [_window setContentView:[myLabelViewController view]]; 

} 

@end 

LabelView.h

#import <Cocoa/Cocoa.h> 

@interface LabelView : NSViewController 

@end 

LabelView.m

#import "LabelView.h" 

@implementation LabelView 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Initialization code here. 
    } 

    return self; 
} 

@end 
+0

Cảm ơn bạn. Tôi đã tạo một NSView có thể sử dụng lại có chứa các thành phần riêng lẻ của tôi. Câu hỏi của tôi liên quan cụ thể đến vấn đề tải xib đó vào các chế độ xem được sử dụng lại. Tôi đã thêm một số làm rõ về điểm gắn bó cụ thể của tôi. – TheNextman

+0

Vì vậy, bạn bị kẹt khi tải chế độ xem trên địa điểm/chế độ xem được yêu cầu? –

+0

Có; về mặt kỹ thuật tôi không thể tìm ra và tôi gặp khó khăn khi tìm tài liệu. Tôi thậm chí không hiểu lý thuyết 'cách Cocoa' để làm điều này, để thử và tìm ra khía cạnh kỹ thuật bản thân mình – TheNextman

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