2015-05-20 22 views
6

Chúng tôi đang quan sát hành vi bất thường liên quan đến Bàn phím willshow & sẽ ẩn thông báo trên iOS 8.3.Thông báo bàn phím iOS được kích hoạt không cần thiết khi hiển thị cảnh báo trên iOS8.3

Bộ kiểm soát xem (nghe thông báo bàn phím) có văn bản và khi nhấp và sau khi nhấn nút gửi, phương thức đầu tiên từ chối trả lời đầu tiên từ trường văn bản và hiển thị cảnh báo để thông báo cảnh báo. Mọi thứ hoạt động tốt, nó loại bỏ bàn phím và hiển thị cảnh báo như mong đợi. (cũng gọi phương thức UIKeyboardWillHideNotification).

Tuy nhiên, trên 8.3, sau khi chạm vào OK/Cancel trên Alertview đại biểu, nó bác bỏ cảnh báo và nó gọi lên UIKeyboardWillShowNotification & UIKeyboardWillHideNotification tương ứng, mặc dù nó không được nghĩa vụ phải được gọi là! Điều này đã không được mong đợi, như bàn phím đã được bác bỏ trước khi dispalying cảnh báo!

Dưới đây là đoạn mã, mà chúng ta đang cố gắng:

- (void)viewDidLoad { 
 

 
    [super viewDidLoad]; 
 

 
    // Do any additional setup after loading the view, typically from a nib. 
 

 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 
 

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

 
    } 
 

 
- (IBAction)ShowAlert:(id)sender { 
 

 
    [self.TxtField resignFirstResponder]; 
 

 
    //This woudln't make any diff either :(
 
    [self.view endEditing:YES]; 
 

 
      [self ShowAlertForTest]; 
 

 
} 
 

 

 
-(void)ShowAlertForTest{ 
 

 
    UIAlertView *theAlertView= [[UIAlertView alloc]initWithTitle:@"Title" 
 

 
                 message:@"msg" 
 

 
                 delegate:self 
 

 
               cancelButtonTitle:@"Cancel" 
 

 
               otherButtonTitles:@"Yes", nil]; 
 

 
    [theAlertView show]; 
 

 
} 
 
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
 
{ 
 
    NSLog(@"buttonIndex = %ld",buttonIndex); 
 
} 
 

 
- (void)keyboardWillShow:(NSNotification *)aNotification 
 
{ 
 
    NSLog(@"keyboardWillShow"); 
 
} 
 

 

 
- (void)keyboardWillHide:(NSNotification *)aNotification 
 
{ 
 
    NSLog(@"keyboardWillHide"); 
 
}

Hành vi này gây ra sự cố trong ứng dụng của chúng tôi, khi có được tầng cảnh báo được kích hoạt từ các đại biểu alertview'd trước - đưa lên bàn phím trong các tình huống không cần thiết.

Bất kỳ trợ giúp/lời khuyên nào được đánh giá cao!

+0

Bạn có cần để hỗ trợ các phiên bản thấp hơn 8? Nếu không, UIAlertView bị phản đối và bạn có thể có nhiều thành công với [UIAlertController] (https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAlertController_class/) – Yaser

+0

Có @Yaser, chúng tôi đang hỗ trợ iOS7 quá! – My3

Trả lời

1

Nhóm của tôi đã thực hiện một công việc xung quanh bằng cách hủy đăng ký thông báo bàn phím trước khi trình bày chế độ xem cảnh báo và đăng ký lại các thông báo đó sau khi chế độ xem cảnh báo đã bị loại bỏ. Không lý tưởng nhưng nó giải quyết vấn đề cho chúng tôi.

2

Trong trường hợp của chúng tôi, bàn phím bị ứng dụng ẩn theo cách thủ công (ví dụ: khi người dùng nhấn Đăng nhập, chúng tôi sẽ ẩn bàn phím và gọi API đăng nhập máy chủ). Khi ứng dụng không hiển thị UIAlertView có thông báo lỗi. Khi người dùng đóng cảnh báo, các bài đăng trên iOS sẽ/đã ẩn & sẽ/đã hiển thị thông báo. Tất nhiên bàn phím không được hiển thị & bị ẩn trong chuỗi này, vì nó đã bị ứng dụng ẩn.

Tuy nhiên, chúng tôi nhận thấy rằng không ẩn bàn phím theo cách thủ công, nhưng thay vào đó cho phép iOS thực hiện việc đó cho chúng tôi, hãy khắc phục sự cố. Vì vậy, bàn phím được ẩn tự động trong hai trường hợp:

  1. khi UIAlertView được hiển thị
  2. khi xem điều khiển được deallocated

Lưu ý: bàn phím sẽ tự động được hiển thị khi UIAlertView được sa thải.

0

Trong trường hợp người dùng của tôi nhấp vào nút đăng nhập, sau đó tôi gọi;

[self.view endEditing: YES]; 
//server request here and in completion/fail alert. 

Keyboard là khép kín, alertview được thể hiện độc đáo, nhưng trên hủy/áp dụng bàn phím bấm được thể hiện một lần nữa và disappeared.But vấn đề đã được này đã xảy ra đôi khi, nếu yêu cầu máy chủ đòi hỏi thời gian vấn đề không được nhìn thấy, nếu Alertview được hiển thị ngay lập tức vấn đề vẫn còn đó. Vì vậy, tôi quyết định gọi cảnh báo của tôi với sự chậm trễ. Đưa sự chậm trễ vào cảnh báo được giải quyết vấn đề của tôi. Hi vọng điêu nay co ich.

0

Tôi vừa khắc phục sự cố tương tự. Bàn phím tiếp tục bật lên sau khi cảnh báo loại bỏ Nó có vẻ giống như một lỗi táo. Tôi recommand bạn sử dụng UIAlertController thay vì UIAlertView. Nó sẽ tránh được rất nhiều vấn đề tiềm năng Có một giải pháp đơn giản: Nếu bạn đang sử dụng UIAlertController, bạn chỉ có thể thiết lập các hoạt hình hoặc không có

[self presentViewController:alert animated:NO completion:nil]; 

Hãy cho tôi biết nếu nó cố định vấn đề của bạn

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