2010-04-21 30 views
7

Tôi biết điều này đã được nói đến rất nhiều. Tôi nghĩ rằng tôi đã đi qua tất cả các câu hỏi trên trang web này, và vẫn chưa thể có được điều này làm việc.Không thể chạm vào UITextField trên UIScrollView

Tôi mới phát triển nhưng tôi có ý thức tốt về những gì đang xảy ra với tất cả mã của tôi. Tôi chắc chắn không có nhiều kinh nghiệm, đây là ứng dụng iPhone đầu tiên của tôi.

Tôi đang tạo trường nhập dữ liệu bao gồm nhiều UITextFields trong UIScrollView. Tôi sẽ tránh giải thích các chi tiết khác cho bây giờ, vì nó có vẻ là một vấn đề rất cơ bản của nó. Nếu không có một scrollview, các textfields hoạt động hoàn hảo. Tôi có thể chạm vào trường văn bản và bàn phím hoặc khung nhìn bộ chọn hiển thị một cách thích hợp. Khi tôi thêm các trường văn bản vào một scrollview, scrollview hoạt động, nhưng sau đó các lĩnh vực văn bản không nhận được chạm của tôi.
Đây là chìa khóa: Khi 'Tương tác người dùng' được ENABLED, scrollview hoạt động nhưng các trường textfield không được đăng ký. Khi 'Tương tác người dùng' bị TẮT, thì chế độ xem cuộn không hoạt động, nhưng trường văn bản chạm ĐƯỢC đăng ký và bàn phím/bộ chọn bật lên.

Từ các bài đăng khác, tôi đã thấy mọi người tạo các lớp con và ghi đè các lần chạm trong một triển khai riêng biệt. Tôi đã nhìn thấy những người sử dụng chế độ xem nội dung tùy chỉnh (subviews?), Tôi đã nhìn thấy một số giải pháp hiện đã lỗi thời vì API đã thay đổi trong phiên bản SDK mới hơn và tôi hoàn toàn bị kẹt.

Tôi sẽ bỏ mã của tôi ngay bây giờ, bởi vì có thể có giải pháp mà ai đó có mà không yêu cầu mã của tôi. Nếu ai đó cần xem mã của tôi, tôi sẽ đưa nó lên. Ứng dụng của tôi đang được viết trong SDK 3.1.3.

Nếu có ai có bất kỳ thông tin nào có thể trợ giúp, nó sẽ được đánh giá rất nhiều.

Trả lời

0

Có vẻ như bạn đang sử dụng IB để thực hiện nhiều bố cục giao diện người dùng của mình. Nếu bạn sử dụng cách tiếp cận có lập trình, bạn có thể thiết lập cấu trúc phân cấp chế độ xem sau sẽ hoạt động.

Đối tượng bộ điều khiển chế độ xem của bạn quản lý chế độ xem cuộn và trường văn bản của bạn phải có đối tượng UIScrollView và đối tượng UIView (ngoài bất kỳ đối tượng nào bạn cần). Trong phương thức loadView của lớp trình điều khiển xem, phân bổ và initalize đối tượng UIView và thêm các trường văn bản của bạn vào nó như là các bản xem trước. Ở cuối phương thức, phân bổ và initalize đối tượng UIScrollView sau đó thêm UIView vào chế độ xem phụ là UIScrollView.

Ví dụ: nếu đối tượng UIScrollView của bạn được gọi là scrollView và đối tượng UIView được gọi là mainView các dòng sau ở cuối phương thức loadView của trình điều khiển xem sẽ thiết lập chính xác chế độ xem cuộn với chế độ xem chính với các trường văn bản trên đó :

scrollView = [[UIScrollView alloc] initWithFrame: [[UIScreen mainScreen] bounds] ]; 
scrollView.backgroundColor = [UIColor whiteColor]; 
scrollView.contentSize = mainView.frame.size; 
[scrollView addSubview: mainView]; 
self.view = scrollView; 
0

Bạn có thể cần bật/tắt tương tác người dùng cho cả chế độ xem cuộn và trường văn bản nếu cần.

Nếu có thể bạn nên sử dụng các cơ chế cảm ứng khác nhau cho từng quy trình (đầu vào cuộn và nhập văn bản).

Có thể bạn có thể kiểm tra chênh lệch thời gian giữa bắt đầu và kết thúc để bạn có thể phát hiện sự khác biệt giữa thao tác kéo (cuộn) và nhấn (nhập văn bản).

Có nói rằng nếu bạn tuyên truyền chạm lên từ các trường văn bản để cuộn xem bạn sẽ ổn.Một điều tôi sử dụng là:

[myObject addTarget:self action:@selector(itemTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside]; 

chuyển đối tượng đó để bạn có thể nhận dạng và hành động tương ứng.

3

Đây là những gì phù hợp với tôi trong Xcode 4.3.3.

Trong bảng phân cảnh, chọn scrollview. Chọn Attribute Inspector ở bên phải. Bỏ chọn Delays Content Touches.

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