2017-09-14 74 views
0

我一直在拉我的頭髮幾個小時,因爲我的xib彈出窗口在iOS 10及更高版本中表現怪異,當textFieldDidBeginEditing被觸發時,這個問題發生,here is video of the issue。代碼爲xib彈出:我的XIB彈出窗口在iOS 10及更高版本上表現怪異

經過幾次調試這個問題。我注意到textFieldDidBeginEditing不會導致這個奇怪的問題。我懷疑是造成這個問題的MJPopupViewController。

#import "NewPopView.h" 
#import "UIViewController+MJPopupViewController.h" 

@interface NewBottlePopView() <UITextFieldDelegate> 
@property (strong, nonatomic) UIViewController *viewController; 
@end 
@implementation NewBottlePopView 
@synthesize viewController; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
} 
*/ 

-(void)showPopUpInViewController:(UIViewController *)controller{ 

    if ([controller class] == [UINavigationController class]) { 
     viewController = [(UINavigationController*)controller visibleViewController]; 
     [viewController setKeepOnTouchOutside:NO]; 
     [viewController presentPopupView:self animationType:MJPopupViewAnimationSlideBottomBottom]; 
    }else{ 
     viewController = controller; 
     [viewController setKeepOnTouchOutside:NO]; 
     [viewController presentPopupView:self animationType:MJPopupViewAnimationSlideBottomBottom]; 
    } 
} 

- (IBAction)close:(id)sender { 
    [viewController dismissPopupViewControllerWithanimationType:MJPopupViewAnimationSlideBottomBottom]; 
} 


#pragma mark Text Field Delegate 
-(void)textFieldDidBeginEditing:(UITextField *)textField { 
    NSLog(@"screen width: %f", [[UIScreen mainScreen] applicationFrame].size.width); 
    if ([[UIScreen mainScreen] applicationFrame].size.width <= 320) 
    { 
     //CGFloat newY = -textField.frame.origin.y - self.frame.size.height; 
     CGFloat newY = -textField.frame.origin.y + 140; 

     if (newY >= self.frame.origin.y) 
      newY = self.frame.origin.y; 

     [UIView animateWithDuration:0.3 animations:^{ 
      self.frame = CGRectMake(self.frame.origin.x, 
            newY, 
            self.frame.size.width, 
            self.frame.size.height); //resize 
     }]; 
    } 
} 

-(void)textFieldDidEndEditing:(UITextField *)textField { 
    if (textField.tag == 202) 
    { 
     NSError *error; 
     NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:@"[^\\d]" options:NSRegularExpressionCaseInsensitive error:&error]; 
     textField.text = [regex stringByReplacingMatchesInString:textField.text options:0 range:NSMakeRange(0, [textField.text length]) withTemplate:@""]; 
    } 

    textField.text = [textField.text uppercaseString]; 
    [textField resignFirstResponder]; 
// [self tapBackground:[self.gestureRecognizers firstObject]]; 
} 

-(BOOL)textFieldShouldReturn:(UITextField*)textField; 
{ 
    textField.text = [textField.text uppercaseString]; 
    NSInteger nextTag = textField.tag + 1; 
    // Try to find next responder 
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 
    if (nextResponder) { 
     // Found next responder, so set it. 
     [nextResponder becomeFirstResponder]; 
    } else { 
     // Not found, so remove keyboard. 
     [textField resignFirstResponder]; 
     [self tapBackground:[self.gestureRecognizers firstObject]]; 
    } 
    return NO; // We do not want UITextField to insert line-breaks. 
} 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    textField.text = [textField.text uppercaseString]; 
    return YES; 
} 

-(void)tapBackground:(UIGestureRecognizer*)getsure{ 
    [self endEditing:YES]; 

    [UIView animateWithDuration:0.3 animations:^{ 
     [self setCenter:viewController.view.center]; 
    }]; 
} 

@end 

我希望有人能幫助我解決這個問題,因爲我不能想了。提前致謝。

+1

你爲什麼找'[UIScreen mainScreen] applicationFrame] .size.width'代替高度?您應該檢測高度是否不足以獲得keyboard.frame.origin.y和yourview.frame.origin.y + yourview.frame.size.y,否? – Larme

+1

哇。這是我第一次見到任何人使用YouTube來炫耀問題。好的工作+1 – 2017-09-14 09:41:37

回答

相關問題