2011-07-05 32 views
9

Tôi có một ứng dụng có bố cục tương tự như iTunes. Cửa sổ chính là một NSSplitView.Tự động thay đổi nội dung của chế độ xem trong NSSplitView?

Tùy thuộc vào những gì người dùng chọn trong cột bên trái, tôi cần hiển thị một chế độ xem khác. Ví dụ: trong itunes nếu bạn nhấp vào "Music", bạn sẽ thấy danh sách các bài hát trong bảng, nếu bạn nhấp vào "Chương trình truyền hình", tôi sẽ thấy một màn hình màu trắng với một số văn bản trên đó.

Đã cố gắng giải quyết vấn đề này cho mọi lứa tuổi, mọi con trỏ đi đúng hướng sẽ rất tiện dụng!

Trả lời

5

Trong ngăn bên phải của NSSplitView bạn có thể đặt tab ít hơn NSTabView. Mỗi tab của chế độ xem có thể chứa một trong các chế độ xem bạn muốn hiển thị. Sau đó, trong giao diện của chế độ xem phác thảo của bạn, chỉ cần yêu cầu chế độ xem tab để hiển thị chế độ xem thích hợp khi một mục cụ thể được chọn.

+0

Làm theo cách này có nghĩa là bạn có thể làm điều đó thông qua Xcode (: – Jacob

1

Nếu bạn có tham chiếu đến chế độ xem sẽ 'thay đổi', bạn có thể trong một số phương pháp delgate thêm chế độ xem mới làm chế độ xem phụ của nó.

+0

Không chắc chắn cách thực hiện điều đó, nhưng tôi chắc chắn nó có thể bằng cách nào đó (: – Jacob

2

Đây thực sự là một công việc cho NSViewController. Sử dụng điều đó có nghĩa là bạn có thể đặt mỗi khung nhìn vào một tệp nib riêng biệt và sau đó hoán đổi chúng vào và ra khi cần. Khi bạn cần phải trao đổi các quan điểm bạn có thể làm một cái gì đó như thế này (giả sử bạn có một NSBox ở khung bên tay phải của NSSplitView)

NSView *musicView = [musicViewController view]; 
[rightPaneBox setContentView:musicView]; 

Chỉnh sửa cho một ví dụ đầy đủ hơn:

Nếu bạn có, ví ví dụ, chế độ xem Nhạc và chế độ xem TV. Bạn sẽ tạo hai tệp nib mới, nói MusicView.nib và TVView.nib và thiết kế các khung nhìn của bạn trong các tệp đó. Sau đó, bạn sẽ tạo hai lớp con của NSViewController, MusicViewController và TVViewController. Trong phương thức init cho từng cái bạn muốn gọi [super initWithNib: @ "MusicView.nib" bundle: nil].

thì trong các phương pháp chọn chế độ xem mới, hãy gọi [xem chế độ xem nhạc] để xem chế độ xem ở bên phải của NSSplitView.

+0

+1 Điều đó thậm chí còn tốt hơn, tuy nhiên tôi không chắc chắn am quen thuộc đủ với XCode 4 để có thể làm điều này từ mặt đất lên. – Jacob

1

Tôi đã tìm thấy một giải pháp khác sau khi thử tất cả mọi thứ không hoạt động. Phương thức -replaceSubview: với: hầu như không chính xác điều đúng. Để chuyển đổi chế độ xem, tất cả những gì bạn phải làm là lưu trữ chế độ xem ẩn hiện tại để sử dụng sau này.

Để đảm bảo chế độ xem được định vị chính xác và có kích thước sao chép khung từ chế độ xem hiện tại trước khi thay thế khung đó bằng chế độ xem tiếp theo.

Dưới đây là một đoạn trích mã:

- (void)toggleView 
{ 
    NSArray* views = [splitView subviews]; 
    long count = [views count]; 

    // toggle last subview's contents (either rightmost or bottommost) 
    NSView* currentContentView = [views objectAtIndex:(count - 1)]; 

    [nextContentView setFrame:[currentContentView frame]]; 

    NSView* temp = currentContentView; 

    [splitView replaceSubview:currentContentView with:nextContentView]; 

    nextContentView = temp; 
} 

Bạn sẽ cần phải khởi nextContentView trước khi gọi này lần đầu tiên. Tôi chỉ định một cổng tham chiếu từ khung nhìn được tạo trong IB cho nó trong ứng dụngDidFinishLaunching.

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