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
我希望有人能幫助我解決這個問題,因爲我不能想了。提前致謝。
你爲什麼找'[UIScreen mainScreen] applicationFrame] .size.width'代替高度?您應該檢測高度是否不足以獲得keyboard.frame.origin.y和yourview.frame.origin.y + yourview.frame.size.y,否? – Larme
哇。這是我第一次見到任何人使用YouTube來炫耀問題。好的工作+1 – 2017-09-14 09:41:37