2017-02-09 30 views
5

Vì vậy, sau khi tìm kiếm dài của tôi qua google và SO, tôi đã không tìm thấy một vấn đề tương tự. Một số đến gần nhưng không giống như tôi.Thanh công cụ đang hoạt hình khi đa nhiệm

Sự cố trong tay: Trong ứng dụng của tôi (WKWebView dựa) nếu bàn phím được hiển thị và tôi nhấn đúp vào nhà và chuyển sang ứng dụng khác mà bàn phím được hiển thị, bàn phím ứng dụng của tôi bị ẩn. Không phải là một vấn đề. Vì vậy, khi tôi đa nhiệm một lần nữa, trong ảnh chụp nhanh ứng dụng của tôi, bàn phím đã biến mất, nhưng thanh công cụ tùy chỉnh tôi có ở trên dường như vẫn ở vị trí không có bàn phím bên dưới. Tôi nhấn vào ứng dụng của tôi và nó hoạt hình lên và sau đó trở lại xuống dưới cùng của màn hình.

Tôi đã thử: Tôi biết về [self.view endEditing: YES], từ chứcFirstResponder và tất cả các phương pháp để đóng bàn phím. Đã cố gắng đặt và trộn thông qua viewWillDisappear, applicationWillResignActive và applicationDidEnterBackground. Không ai trong số đó sẽ xử lý vấn đề thanh công cụ của tôi.

Đây là cách tôi làm hiển thị bàn phím và tắt màn hình, đồng thời giữ thanh công cụ hiển thị.

- (void)keyboardWillShow:(NSNotification*)notification 
{ 
    NSDictionary* info = [notification userInfo]; 
    NSNumber *durationValue = info[UIKeyboardAnimationDurationUserInfoKey]; 
    NSNumber *curveValue = info[UIKeyboardAnimationCurveUserInfoKey]; 
    NSValue *endFrame = info[UIKeyboardFrameEndUserInfoKey]; 

    [UIView animateWithDuration:durationValue.doubleValue 
          delay:0 
         options:(curveValue.intValue << 16) 
        animations:^{ 
         self.toolBar.frame = CGRectMake(0, 
                 [endFrame CGRectValue].origin.y - self.toolBar.bounds.size.height+44, 
                 self.toolBar.bounds.size.width, 
                 self.toolBar.bounds.size.height); 
        } 
        completion:nil]; 
} 

- (void)keyboardWillHide:(NSNotification*)notification 
{ 
    NSDictionary* info = [notification userInfo]; 
    NSNumber *durationValue = info[UIKeyboardAnimationDurationUserInfoKey]; 
    NSNumber *curveValue = info[UIKeyboardAnimationCurveUserInfoKey]; 
    NSValue *endFrame = info[UIKeyboardFrameEndUserInfoKey]; 

    [UIView animateWithDuration:durationValue.doubleValue 
          delay:0 
         options:(curveValue.intValue << 16) 
        animations:^{ 
         self.toolBar.frame = CGRectMake(0, 
                 [endFrame CGRectValue].origin.y - self.toolBar.bounds.size.height, 
                 self.toolBar.bounds.size.width, 
                 self.toolBar.bounds.size.height); 
        } 
        completion:nil]; 
} 

Có ai có đầu mối hay suy nghĩ không?

Một lần nữa ứng dụng của tôi dựa trên WKWebView, vì vậy việc gọi điện trực tiếp hoặc hướng đến các bản xem trước văn bản, cố gắng tập trung vào chế độ xem web là vô nghĩa.

Nếu ai đó cần thêm mã, hãy cho tôi biết. Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn bạn.

CẬP NHẬT 1/20/18

Vì vậy, đây là mã yêu cầu liên quan đến địa điểm và cách thanh công cụ của tôi được khởi tạo và nạp.

h.

UIToolbar *toolBar; 
@property (nonatomic, strong) UIToolbar *toolBar; 

m.

@synthesize toolBar; 

- (void)viewDidLoad { 
    //Toolbar setup 
    CGRect toolFrame, remain; 
    CGRectDivide(self.view.bounds, &toolFrame, &remain, 48, CGRectMaxYEdge); 
    self.toolBar = [[UIToolbar alloc] initWithFrame:toolFrame]; 
    [self.toolBar setBarStyle:UIBarStyleBlackTranslucent]; 
    [self.toolBar setClipsToBounds:YES]; 
    [self.toolBar setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin]; 
    [self.view addSubview:self.toolBar]; 
} 

Đó là về nó, sau đó một số mã gọi để làm mới khi tôi chuyển nút, không có gì khác được gắn với thanh công cụ này.

Điều này không được gọi trừ khi tôi nhấn vào nút chuyển hoặc cần phải làm mới khi người dùng thay đổi nền, Xử lý NSUserDefaults trong chế độ xem khác.

-(void)viewWillLayoutSubviews{ 
    [self.currentScrollView layoutIfNeeded]; 
    [self.toolBar layoutIfNeeded]; 
    [self.view layoutSubviews]; 
} 
+0

Đây vẫn là sự cố liên tục với ứng dụng của tôi. – ChrisOSX

+0

Bạn đã tạo thanh công cụ ở đâu và như thế nào? – ChikabuZ

+0

Được tạo trong chế độ xem chính của tôi (viewDidLoad) khi tải ứng dụng. Tôi tạo nó trong tệp h với thuộc tính và sau đó tổng hợp trong tệp m và thêm nó vào lớp con. – ChrisOSX

Trả lời

0

Vì vậy, dưới đây là những gì đang làm việc cho tôi.

Trong AppDelegate.m của tôi, tôi chỉ cần đặt endEditing:

- (void)applicationWillResignActive:(UIApplication *)application { 
    [self.window endEditing:YES]; 
} 

Bây giờ trong thông báo keyboardWillShow tôi:

- (void)keyboardWillShow:(NSNotification*)notification 
{ 
    /////New added method////// 
    if([UIApplication sharedApplication].applicationState != UIApplicationStateActive){ 
     return; 
    } 


    NSDictionary* info = [notification userInfo]; 
    NSNumber *durationValue = info[UIKeyboardAnimationDurationUserInfoKey]; 
    NSNumber *curveValue = info[UIKeyboardAnimationCurveUserInfoKey]; 
    NSValue *endFrame = info[UIKeyboardFrameEndUserInfoKey]; 

    [UIView animateWithDuration:durationValue.doubleValue 
          delay:0 
         options:(curveValue.integerValue << 16) 
        animations:^{ 
         self.toolBar.frame = CGRectMake(0, 
                 [endFrame CGRectValue].origin.y - self.toolBar.bounds.size.height+44, 
                 self.toolBar.bounds.size.width, 
                 self.toolBar.bounds.size.height); 
        } 
        completion:nil];  
} 

Đó là nó, một cái gì đó đơn giản như vậy sau khi tất cả. Chỉ cần ẩn bàn phím, như tôi đã làm trước đây và kiểm tra xem ứng dụng có đang hoạt động hay không.

Bây giờ khi tôi nhấn đúp vào nhà, hãy ẩn bàn phím. Nếu tôi truy cập một ứng dụng khác như Tin nhắn, hãy vẽ bàn phím, nhấn đúp lần nữa và quay lại ứng dụng của tôi, bàn phím sẽ không bao giờ di chuyển.Giải quyết vấn đề của tôi.

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