2013-04-21 29 views
7

UITableView dường như có một số hành vi tự động, nếu một ô chứa textField hoặc textView, và trường hoặc view đó trở thành đáp ứng đầu tiên, tableView sẽ tự cuộn để ô không bị che khuất bằng bàn phím. Tôi chắc chắn rằng, trong hầu hết các trường hợp, điều này rất tiện dụng.Ngăn UITableView di chuyển đến ô chứa textField

Trong trường hợp của tôi không tốt. TableView nằm trong một containerView nhỏ hơn, và hành vi mặc định rời khỏi trường vẫn bị che khuất. Tôi muốn xử lý việc di chuyển toàn bộ vùng chứa, và hành vi di chuyển mặc định đang cản trở.

Có ai biết cách tôi có thể "tắt" tính năng này của UITableView không?

+0

nhìn vào câu hỏi này http://stackoverflow.com/questions/4585718/disable-uiscrollview-scrolling-when-uitextfield-becomes-first-responder –

+0

tôi m không chắc chắn nếu đó là bởi vì nó là một UITableView, chứ không phải là một UIScrollView thẳng, hoặc bởi vì những giải pháp đã được đề xuất theo một SDK cũ hơn, nhưng không có giải pháp được đề xuất trong bài đăng đó làm việc cho tôi. Với mỗi giải pháp, TableView của tôi vẫn được cuộn tự động. –

+0

[Câu trả lời này] (http://stackoverflow.com/a/32313035/4482870) (của tôi) mô tả một giải pháp khá đơn giản cho vấn đề. – tonso

Trả lời

1

Tôi đã gặp vấn đề tương tự, tôi đã có UITableView trong chế độ xem vùng chứa nhỏ hơn và khi tôi chọn UITextField trong bảngView nó sẽ tự động cuộn đến vị trí không mong muốn. Đây là hành vi mặc định của UITableView và dường như không có cách nào để tắt nó.

Thay vào đó, tôi đã thay đổi bộ điều khiển subView này thành lớp con của UIViewController thay vì UITableViewController. tức là cho TransportViewController.h tôi kiểm soát một tableView:

@interface TransportViewController : UITableViewController <UITextFieldDelegate> 

trở thành:

@interface TransportViewController : UIViewController <UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate> 

Bằng cách đặt các lớp như là một lớp UIViewController thay vào đó, cuộn tự động của các tế bào bảng sẽ không xảy ra.

Bây giờ bạn không phải là lớp con UITableViewController, bây giờ bạn phải đặt thuộc tính 'tableView' theo cách thủ công để trỏ đến chế độ xem bảng thích hợp. Bạn có thể kết nối này trong IB mà sẽ cung cấp cho bạn một cái gì đó như:

@property (strong, nonatomic) IBOutlet UITableView *tableView; 

Cuối cùng, bạn cũng sẽ phải thiết lập tài sản tableView mới giao này được các đại biểu và nguồn dữ liệu của bảng. Bạn có thể làm điều này trong phương pháp 'viewDidLoad' như vậy:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    _tableView.dataSource = self; 
    _tableView.delegate = self; 

} 

Điều này sẽ ngăn chặn sự di chuyển tự động đó là cố hữu trong UITableViewController khi một UITextField được chọn. Sau đó, bạn có thể thực hiện bất kỳ phương thức UITableViewDataSource cần thiết nào và để xử lý các phương thức tự động cuộn của riêng bạn.

0

Tôi đã giải quyết vấn đề này bằng cách triển khai phương thức scrollViewDidScroll: (từ giao thức UIScrollViewDelegate). Phương thức này được gọi khi bàn phím làm cho cuộn số UITableView của bạn.

Dưới đây là những gì tôi đã làm:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    [tableViewController.tableView setContentOffset:CGPointMake(0., 0.)]; 
} 
+0

phương pháp này được gọi trên bất kỳ thay đổi bù đắp nội dung nào. – Andy

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