2013-09-21 48 views
19

Tôi vừa tìm thấy một lỗi gây phiền nhiễu với thuộc tính keyboardDismissMode mới của scroll view. Khi sử dụng tính năng này với một text view với giá trị UIScrollViewKeyboardDismissModeInteractive và bàn phím bị loại bỏ, scroll view dường như nhảy lên trên cùng trước khi nó tiếp tục giảm tốc.Bàn phím UITextViewDismissMode Bug

Tôi đã gửi báo cáo lỗi với Apple nhưng cần giải pháp. Tôi đã thử các DAKeyboardControl mà không có sự hỗ trợ iOS7 mới mà đằng sau hậu trường đang sử dụng keyboardDismissMode và nó vẫn làm điều đó mà tôi cho thấy đây là một vấn đề sâu sắc hơn nhiều.

Mọi đề xuất?

+0

Tôi đang cố gắng để sinh sản. Tôi đã thêm chế độ xem văn bản qua cửa sổ và có văn bản dài. Tôi đặt chế độ loại bỏ bàn phím thành tương tác. Tôi đã thêm một thực thi 'scrollViewDidScroll:' để bắt các bước nhảy lạ. Nó hoạt động như mong đợi. Bạn có thể vui lòng giải thích thêm về trường hợp sử dụng của bạn không? –

+0

Tôi đã đăng dự án ví dụ của mình tại đây: http://cl.ly/013q0t022j0l. Dự án là một chế độ xem văn bản duy nhất trong bảng phân cảnh với một số văn bản ipsum lorem. Trình điều khiển chế độ xem đăng ký cho bàn phím đã ẩn thông báo và cũng là giao diện xem văn bản. Tôi đang đăng nhập thông báo ẩn đã làm cũng như vị trí y của bù đắp nội dung khi cuộn chế độ xem cuộn. – Dino

+0

Nếu bạn chạy dự án và loại bỏ bàn phím, bạn sẽ thấy một số con số khá thất thường đến từ phương thức scrollViewDidScroll sau khi thông báo ẩn đã được kích hoạt. – Dino

Trả lời

0

Dường như có lỗi hoặc chỉ là trạng thái mặc định không lý tưởng. Nhưng dựa trên mã trong dự án thử nghiệm một cái gì đó như dưới đây có thể làm việc sau khi một số điều chỉnh tốt hơn.

Có hai vấn đề với mã mẫu, một là bạn không làm bất cứ điều gì về kích thước của văn bản khi bàn phím xuất hiện, vì vậy bạn không thể sử dụng hoặc xem văn bản dưới bàn phím. Có giải pháp khác nhưng giải pháp nhanh chóng và bẩn là thay đổi kích thước khung hình (trong ứng dụng gửi, tôi cũng sẽ lấy thông tin hoạt ảnh và tạo hiệu ứng khung hình thay đổi để phù hợp với hoạt ảnh bàn phím vượt quá phạm vi của câu hỏi này). Bạn làm điều đó trong 'willShow' hoặc tương tự, và đưa nó trở lại trong 'didHide' hoặc tương tự.

Sau đó, bù đắp nội dung bị nhòe khi ẩn và có vẻ như có một số trạng thái lạ khi bạn kéo nó ra khỏi màn hình trước và xung quanh các cuộc gọi lại để ẩn và di chuyển các thay đổi của chế độ xem. Tôi chỉ lưu trạng thái và "sửa" nó khi bàn phím biến mất và tôi đã cập nhật chế độ xem văn bản.

Tôi đã tạo một vài thuộc tính và một lối thoát trong bảng phân cảnh để di chuyển với chế độ xem văn bản.

 
- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; 
} 

- (void) keyboardWillShow:(NSNotification *)notification 
{ 
    NSDictionary * info = [notification userInfo]; 
    CGSize size = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    CGRect rect = self.textView.frame; 
    rect.size.height -= size.height; 
    self.textView.frame = rect; 
} 

- (void)keyboardDidHide:(NSNotification *)notification 
{ 
    NSLog(@"====== keyboardDidHide ======="); 

    NSDictionary * info = [notification userInfo]; 
    CGSize size = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    CGRect rect = self.textView.frame; 
    rect.size.height += size.height; 
    self.textView.frame = rect; 


    self.hidingKeyboard = YES; 
} 

- (void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    NSLog(@"%f", scrollView.contentOffset.y); 
    if(self.hidingKeyboard == YES) 
    { 
     scrollView.contentOffset = self.lastOffset; 
     self.hidingKeyboard = NO; 
     NSLog(@"====== reset ======="); 
    } 
    else 
     self.lastOffset = scrollView.contentOffset; 
} 
+0

Mục đích của mã mẫu là để chứng minh lỗi gây ra bằng cách loại bỏ bàn phím. Tôi đánh giá cao thực tế là bạn không thể xem văn bản phía sau bàn phím nhưng điều này không liên quan gì đến lỗi mà tôi đang hỏi. Bằng cách không bao gồm mã thay đổi khung khi bàn phím xuất hiện, chúng tôi có thể loại trừ khả năng gây ra/đóng góp cho sự cố. – Dino

+0

Ngoài ra tôi đã thực hiện sửa chữa của bạn cho các nội dung sai lầm bù đắp lên sau khi ẩn bàn phím và nó không hoạt động ngay cả khi không có giảm tốc. – Dino

+0

Mô tả thêm tương tác bạn đang cố gắng và những gì bạn đang thấy.Khi tôi kéo từ textView trên bàn phím xuống màn hình tắt bàn phím và mã ở trên giữ văn bản mà tôi nhìn thấy trên màn hình tại cùng một vị trí tôi mong đợi nó được (tức là tôi kéo nó xuống với bàn phím). – EricLeaf

1

cho vấn đề này tốt hơn bạn mã hóa với scrollviewDelegete và chỉ cần đề cập đến khi bạn muốn bỏ bàn phím thông qua ResignFirstResponder