2015-05-27 15 views
16

Tôi có ứng dụng trò chuyện đơn giản với tin nhắn văn bản xem dựa trên NSTableView như bạn có thể thấy ở hình bên dưới. enter image description here Mỗi thư chứa cá thể NSTextView có chiều cao để vừa với tất cả văn bản.Cách gọi NSScrollView autoscroll-method theo cách lập trình

Tất cả những gì tôi cần là bắt đầu NSScrollView (trong đó NSTableView-instance được kèm theo) autoscrolling trong khi người dùng chọn văn bản kéo chuột đủ xa. Thật không may, tính năng tự động kiểm tra không xuất hiện. Trong trường hợp kéo một nơi nào đó bên ngoài văn bản, tất cả đều thành công.

Tôi cố gắng để gọi autoscroll: -method trực tiếp bằng cách đơn giản đẩy NSEvent -instance từ NSTextView -subclass "chuột kéo" -event (như trong ví dụ từ this article):

- (void)mouseDragged:(NSEvent *)event 
{ 
    [self.scrollView autoscroll:event]; 
} 

Như tôi đã gạt tất cả các sự kiện chuột và thực hiện tất cả các lựa chọn văn bản, phương pháp này thường gọi. Nhưng việc tự động kiểm tra có vẻ không hoạt động.

CẬP NHẬT

tôi đã tìm ra rằng trước khi gọi -autoscroll: -method phải có -mouseDown: của cùng một đối tượng. Nhưng nó phá vỡ cơ chế lựa chọn văn bản của tôi. Điểm thậm chí không phải là lần đầu tiên trả lời, không được có gì khác ngoài phương pháp mouseDown:.

+0

Nếu bạn đang nói rằng với một NSTableView bên trong một NSScrollView và các hàng NSTableView là nhiều dòng, và khi chọn văn bản bên trong một ô và kéo xuống dưới dưới cùng của dạng xem cuộn, nó không cuộn? Nếu vậy, chức năng đó được cung cấp tự động bởi NSScrollView và không có gì khác là cần thiết để di chuyển để xảy ra trong khi lựa chọn. Để kiểm tra, tôi đã tạo một dự án mới, thêm một NSScrollView (NSTableView), thiết lập chiều cao hàng lớn hơn khung nhìn cuộn và điền vào bảng nhìn. Nhấp vào văn bản và sau đó chọn xuống phía dưới cùng của chế độ xem cuộn. Nó được cuộn tự động. – Jay

+0

@Jay Tôi cần bắt đầu tính năng tự động kiểm tra chế độ xem cuộn của NSTableView, chứ không phải chế độ xem văn bản của chế độ xem (chế độ xem văn bản có chiều cao đủ để vừa với văn bản). – Astoria

+0

Tôi không chắc chắn những gì bạn đang yêu cầu. Giả sử bạn dùng NSTableView từ Thư viện đối tượng vào cửa sổ trong Xcode, NSTableView sẽ được bao bọc bởi một NSScrollview.Nếu bạn đang cố gắng để chọn văn bản trong một hàng trong một tableview bằng cách nhấp chuột vào hàng nơi văn bản và kéo xuống (đó là cách nó xuất hiện từ ảnh chụp màn hình, NScrollView kèm theo xử lý tự động và sẽ cuộn lên để Bạn có thể tiếp tục chọn văn bản – Jay

Trả lời

2

Thông thường, chế độ xem văn bản nằm trong chế độ xem cuộn của riêng nó. Ngay cả khi đó là đủ lớn để hiển thị tất cả các văn bản mà không cần di chuyển, nó vẫn còn đó. Một cuộc gọi của -autoscroll: trên bất kỳ nội dung nào trong chế độ xem cuộn đó (có thể bao gồm cả chế độ xem cuộn đó?) Sẽ chỉ cố gắng cuộn chế độ xem cuộn đó, không phải dạng xem cuộn có chứa chế độ xem bảng.

Hãy thử gọi -autoscroll: trên chế độ xem cao hơn trong cấu trúc phân cấp. Hoặc là self.scrollView.superview, chế độ xem ô của bảng hoặc chế độ xem bảng.

Lưu ý, tuy nhiên, chế độ xem cuộn của chế độ xem bảng sẽ tiếp tục di chuyển ngay cả sau khi chế độ xem ô có chứa chế độ xem văn bản hoàn toàn trên màn hình. Trong thực tế, nó có thể tiếp tục di chuyển nó cho đến nay nó tắt màn hình theo một hướng khác. Về cơ bản, nó không biết rằng bạn đang cố gắng chọn trong khung nhìn văn bản để nó không biết dừng khi lựa chọn mở rộng đến tận mép của chế độ xem văn bản.

Một cách tiếp cận khác có thể là cố gắng sử dụng chế độ xem văn bản "trần" không có chế độ xem cuộn kèm theo. Tôi không nghĩ rằng IB sẽ cho phép bạn làm điều đó, vì vậy bạn phải làm điều đó theo chương trình. Mặc dù vậy, chế độ xem văn bản trần không chơi tốt với bố cục tự động.

+0

Gọi '-autoscroll:' (trên chế độ xem bảng hoặc dạng xem cuộn kèm theo) với một sự kiện được lấy từ tham số '-mouseDragged:' không gây ra gì cả. Có lẽ tôi nên thay đổi 'NSEvent' bằng cách nào đó. – Astoria

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