diff -r 6d059ed9b6ca src/video/uikit/SDL_uikitview.h --- a/src/video/uikit/SDL_uikitview.h Tue Jul 22 23:12:21 2014 -0400 +++ b/src/video/uikit/SDL_uikitview.h Tue Feb 24 10:01:09 2015 -0700 @@ -61,7 +61,8 @@ - (void)showKeyboard; - (void)hideKeyboard; - (void)initializeKeyboard; -@property (readonly) BOOL keyboardVisible; +@property (nonatomic,assign) UITextField *textField; +@property (nonatomic,assign) BOOL keyboardVisible; @property (nonatomic,assign) SDL_Rect textInputRect; @property (nonatomic,assign) int keyboardHeight; diff -r 6d059ed9b6ca src/video/uikit/SDL_uikitview.m --- a/src/video/uikit/SDL_uikitview.m Tue Jul 22 23:12:21 2014 -0400 +++ b/src/video/uikit/SDL_uikitview.m Tue Feb 24 10:01:09 2015 -0700 @@ -199,14 +199,12 @@ */ #if SDL_IPHONE_KEYBOARD +@synthesize textField = textField; @synthesize textInputRect = textInputRect; @synthesize keyboardHeight = keyboardHeight; /* Is the iPhone virtual keyboard visible onscreen? */ -- (BOOL)keyboardVisible -{ - return keyboardVisible; -} +@synthesize keyboardVisible = keyboardVisible; /* Set ourselves up as a UITextFieldDelegate */ - (void)initializeKeyboard @@ -328,6 +326,16 @@ return view; } + +UITextField *UIKit_GetTextField() { + SDL_Window *window = SDL_GetFocusWindow(); + if (!window) { return nil; } + SDL_uikitview *view = getWindowView(window); + if (!view) { return nil; } + return view.textField; +} + + SDL_bool UIKit_HasScreenKeyboardSupport(_THIS) { return SDL_TRUE; @@ -368,6 +376,8 @@ SDL_uikitview *view = data->view; if (!view) { return; } + int ios8 = ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0); + SDL_Rect r = view.textInputRect; int height = view.keyboardHeight; int offsetx = 0; @@ -382,20 +392,26 @@ offsety = kbottom-bottom; } } - UIInterfaceOrientation ui_orient = [[UIApplication sharedApplication] statusBarOrientation]; - if (ui_orient == UIInterfaceOrientationLandscapeLeft) { - int tmp = offsetx; offsetx = offsety; offsety = tmp; + + if (!ios8) { + UIInterfaceOrientation ui_orient = [[UIApplication sharedApplication] statusBarOrientation]; + if (ui_orient == UIInterfaceOrientationLandscapeLeft) { + int tmp = offsetx; offsetx = offsety; offsety = tmp; + } + if (ui_orient == UIInterfaceOrientationLandscapeRight) { + offsety = -offsety; + int tmp = offsetx; offsetx = offsety; offsety = tmp; + } + if (ui_orient == UIInterfaceOrientationPortraitUpsideDown) { + offsety = -offsety; + } + + offsetx /= scale; + offsety /= scale; + } else { + offsetx /= scale; + offsety /= scale; } - if (ui_orient == UIInterfaceOrientationLandscapeRight) { - offsety = -offsety; - int tmp = offsetx; offsetx = offsety; offsety = tmp; - } - if (ui_orient == UIInterfaceOrientationPortraitUpsideDown) { - offsety = -offsety; - } - - offsetx /= scale; - offsety /= scale; view.frame = CGRectMake(offsetx,offsety,view.frame.size.width,view.frame.size.height); } @@ -406,6 +422,7 @@ return ; } + view.keyboardVisible = (height > 0); view.keyboardHeight = height; _uikit_keyboard_update(); } @@ -413,22 +430,28 @@ void _uikit_keyboard_init() { NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; NSOperationQueue *queue = [NSOperationQueue mainQueue]; + + int ios8 = ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0); + [center addObserverForName:UIKeyboardWillShowNotification object:nil queue:queue usingBlock:^(NSNotification *notification) { int height = 0; + CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; height = keyboardSize.height; UIInterfaceOrientation ui_orient = [[UIApplication sharedApplication] statusBarOrientation]; - if (ui_orient == UIInterfaceOrientationLandscapeRight || ui_orient == UIInterfaceOrientationLandscapeLeft) { + if (!ios8) { + if (ui_orient == UIInterfaceOrientationLandscapeRight || ui_orient == UIInterfaceOrientationLandscapeLeft) { height = keyboardSize.width; + } } height *= [UIScreen mainScreen].scale; _uikit_keyboard_set_height(height); } ]; - [center addObserverForName:UIKeyboardDidHideNotification + [center addObserverForName:UIKeyboardWillHideNotification object:nil queue:queue usingBlock:^(NSNotification *notification) {