2011-11-08 28 views
32

Tôi đang cố gắng để có được Cửa sổ Đăng nhập hiển thị dưới dạng trang tính từ MainWindow, nhưng bất cứ khi nào tôi cố gắng triển khai các lỗi của AppKit luôn bật lên vì nhiều lý do không thể phân biệt được.Hiển thị Cửa sổ Cacao làm Trang tính trong Xcode 4 (OSX 10.7.2) với ARC

Không có hướng dẫn trực tuyến nào đang hoạt động, khi tôi áp dụng mã/lớp đã điều chỉnh cho dự án của riêng mình, chúng không bao giờ hoạt động.

Hầu hết các hướng dẫn đều lỗi thời, kể cả Tài liệu Apple. Và không ai trong số họ dường như tương thích với tính năng đếm tham chiếu tự động. Hoặc giao diện Xcode 4.

Ai đó có thể xem chi tiết cho tôi đầy đủ hướng dẫn, cách đơn giản nhất để hiển thị trang tính sau khi nhấn nút trên MainWindow.

Vui lòng hỏi thêm thông tin nếu bạn cần.

Trả lời

92

Hướng dẫn cho Xcode 4

Tạo dự án mới và thêm dòng sau vào AppDelegate.hAppDelegate.m.

AppDelegate.h

#import <Cocoa/Cocoa.h> 

@interface AppDelegate : NSObject <NSApplicationDelegate> { 

    IBOutlet NSPanel *theSheet; 
} 

@property (assign) IBOutlet NSWindow *window; 

@end 

AppDelegate.m

#import "AppDelegate.h" 

@implementation AppDelegate 

@synthesize window = _window; 

- (IBAction) showTheSheet:(id)sender { 

    [NSApp beginSheet:theSheet 
     modalForWindow:(NSWindow *)_window 
     modalDelegate:self 
     didEndSelector:nil 
      contextInfo:nil]; 

} 

-(IBAction)endTheSheet:(id)sender { 

    [NSApp endSheet:theSheet]; 
    [theSheet orderOut:sender]; 

} 

@end 

Mở MainMenu.xib.
Sử dụng NSWindow hiện có.
Làm cho nó có thể nhìn thấy bằng cách sử dụng nút sau:

Xcode

Tạo một tài khoản mới NSPanel.
Thêm NSButtons thích hợp.

Xcode

Connect Close đến App Delegate.

Xcode

Và chọn endTheSheet.

Xcode

Connect Open đến App Delegate.

Xcode

Và chọn showTheSheet.

Xcode

Nối App Delegate đến mới NSPanel.

Xcode

Và chọn theSheet.

Xcode

Chọn NSPanel và vô hiệu hóa Visible At Launch. (! Bước khái quát)

Xcode

Bây giờ nhấn chạy và tận hưởng kết quả:

Xcode

+8

Bạn đang lật tuyệt vời! những ảnh chụp màn hình đó thực sự tốt đẹp và hữu ích, cảm ơn bạn rất nhiều. –

+0

Câu hỏi với Anne trên mẫu ở trên: nếu tôi sẽ thêm một NSTextField vào trang tính, làm thế nào tôi có thể chuyển văn bản qua lại giữa trang tính và cửa sổ chính của nó? – Woofy

+0

Đến đây hôm nay. Cảm ơn rất hữu ích! – Hassan

5

Mọi thứ đã thay đổi trong SDK 10.10 - các cuộc gọi được đơn giản để hiểu rằng tôi nghĩ. Một cửa sổ cha mẹ phụ trách tung ra một đứa trẻ NSWindow như một tờ giấy - và sau đó bạn chuyển đứa trẻ này NSWindow đến NSApp để chạy một cách bình thường. Sau đó, làm điều ngược lại để unwrap.

Hiển thị tờ

Để hiển thị bảng thay vì gọi:

[NSApp beginSheet:theSheet 
    modalForWindow:(NSWindow *)_window 
    modalDelegate:self 
    didEndSelector:nil 
     contextInfo:nil]; 

Bây giờ bạn gọi vào cửa sổ cha mẹ:

(void)beginSheet:(NSWindow *)sheetWindow 
completionHandler:(void (^)(NSModalResponse returnCode))handler 

Và sau đó để chạy các tấm như trong vòng lặp phương thức, bạn cũng phải gọi cho NSApp bằng:

- (NSInteger)runModalForWindow:(NSWindow *)aWindow 

Đóng Tấm

Để đóng bảng, gọi trên cửa sổ cha mẹ:

- (void)endSheet:(NSWindow *)sheetWindow 

nào làm cho completionHandler từ cuộc gọi trên để bắn, - trong đó bạn có thể đặt một cuộc gọi để ngừng chạy cửa sổ phương thức bằng cách gọi NSApp với:

- (void)stopModalWithCode:(NSInteger)returnCode 

Ví dụ đầy đủ

@implementation AppDelegate 

@synthesize window = _window; 

- (IBAction) showTheSheet:(id)sender { 

    [_window beginSheet: theSheet 
     completionHandler:^(NSModalResponse returnCode) { 
      [NSApp stopModalWithCode: returnCode]; 
     }]; 

    [NSApp runModalForWindow: theSheet]; 

} 

-(IBAction)endTheSheet:(id)sender { 
    [_window endSheet: theSheet]; 
} 

@end 
+1

Nếu điều này không có ở đây (vì tựa đề là đặc trưng cho xcode 4, vui lòng cho tôi biết trước khi downvoting và tôi sẽ xóa nó) –

+2

Nó cần phải được nói rằng cửa sổ trang tính phải được ẩn trước khi beginSheet được gọi là nếu không nó trông giống như một tờ nhưng không được đính kèm. – Lothar

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