2011-11-26 10 views
6

hoàn toàn tùy chỉnh Có thể tạo cảnh báo tùy chỉnh hoàn toàn không? Tôi đang làm điều đó với các tờ tùy chỉnh ngay bây giờ, nhưng tôi muốn có tính năng mà trang tính đang chặn (như -[NSAlert runModal]).Tạo NSAlert

Tôi chỉ muốn thay đổi màu nền, thực sự và màu văn bản, tất nhiên.

+1

Về mặt kỹ thuật, nó không được gọi là trang tính nếu nó đang chạy trong một cách thức ứng dụng. – JWWalker

+0

Cảnh báo kiểu ứng dụng với màu nền và màu văn bản tùy chỉnh giống như có thể khá khó chịu. Bạn có thực sự * cần * để làm điều này? Bạn đã đọc [Nguyên tắc Giao diện Con người Mac] (http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AppleHIGuidelines/Intro/Intro.html) chưa? –

+0

Nó không phải là khó chịu ở tất cả, thực sự. Cảnh báo không phù hợp với nhu cầu của tôi, vì tôi đang làm việc với một ứng dụng toàn màn hình và tôi đang sử dụng 'NSStatusWindowLevel'. Tôi đã đọc những hướng dẫn đó một thời gian trước, vâng. – Fatso

Trả lời

5

Cảnh báo về các giải pháp đề nghị:

Mã này gây lãng phí và vô nghĩa overhead:

for (;;) { 
    if ([NSApp runModalSession:session] != NSRunContinuesResponse) 
     break; 
} 

Mã này được sao chép trực tiếp từ trang tài liệu của Apple - nhưng nó có nghĩa là để hiển thị nhà phát triển nơi mã có ý nghĩa có thể được chèn để thực thi nền trong khi phương thức chạy. Tức là, bạn nên có một số mã giữa khoảng ngắt và giá đóng. Nhưng không có mã thực tế được hiển thị trong ví dụ - và chạy nó như thế này đơn giản khiến cho ứng dụng của bạn thăm dò ý kiến ​​phiên lặp lại cho đến khi nó kết thúc. Nó giống như hai tuổi ở ghế sau của chiếc xe trên một chuyến đi đường hỏi, "Chúng ta có chưa? Chúng tôi có chưa? Chúng tôi chưa?"

Nếu bạn chỉ muốn đơn giản phương thức thực hiện, nơi ứng dụng của bạn trình bày một cửa sổ modal và đình chỉ xử lý các cửa sổ/nền chính cho đến tận cùng phương thức, sử dụng này:

[NSApp runModalForWindow: self.window]; 

... và sau đó thoát phiên modal khi cửa sổ đóng bằng cách thả này vào bộ điều khiển cửa sổ của bạn:

- (void)windowWillClose:(NSNotification *)notification { 
    [NSApp stopModal]; 
} 
+0

Được rồi David, cảm ơn vì đã làm rõ !! – Fatso

3

Bạn sẽ cần cửa sổ tùy chỉnh với bản vẽ chế độ xem tùy chỉnh, tuy nhiên NSAlert không cho phép bạn thay đổi cửa sổ của nó. Vì vậy, bạn sẽ cần phải viết phân lớp điều khiển cửa sổ của riêng bạn như NSAlert (mặc dù NSAlert là một phân lớp của NSObject).

2

Tôi nhìn xung quanh một chút, và tìm thấy đoạn mã này:

NSModalSession session = [NSApp beginModalSessionForWindow:sheetWindow]; 
for (;;) { 
    if ([NSApp runModalSession:session] != NSRunContinuesResponse) 
     break; 
} 
[NSApp endModalSession:session]; 

tôi gọi

[NSApp stopModal] 

kết thúc phiên. Bây giờ mã của tôi là cách sạch :)