IOS 8:custom Keyboard with undo and redo button - ios

I have developed an IOS 8 custom keyboard. I want to give it "undo" and "redo" functionality, like the default system keyboard. I have tried it in different ways but was unable to find a good solution.
We can interact with a Text Input Object textDocumentProxy with the methods
insertText
deleteBackward
documentContextAfterInput
ocumentContextBeforeInput
But I was unable to find any way of implementing "undo" and "redo" functionality.

I think we can NOT implement these function (undo,redo)
According to https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html
Because a custom keyboard can draw only within the primary view of its
UIInputViewController object, it cannot select text. Text selection is
under the control of the app that is using the keyboard. If that app
provides an editing menu interface (such as for Cut, Copy, and Paste),
the keyboard has no access to it. A custom keyboard cannot offer
inline autocorrection controls near the insertion point.
I think there are many case that content of textfield changed and you can not know when it changed, how it changed. If we can not know, we can not know to undo to where too. I think so.
I'm developing Custom keyboard extension like you and I have many problems. (eg: how can we know the current cursor to get current text selection...)
My question: Current text selection in CustomKeyBoardExtension (hope somebody know)

Related

iOS Keyboard extension - adding buttons to standard keyboard (system-wide input accessory view)

Based on docs I know that I can implement a custom system-wide keyboard by implementing keyboard extension.
However, when working only in application scope, we are recommended to use custom input views. In app-scope, we have an option to implement just an input accessory view, in case we just want to add a couple of buttons to a standard keyboard.
Now I am standing before a task in which seems I would very much benefit from something like a system-wide accessory input view. I need only to add a couple of buttons to the standard keyboard, but it needs to be accessible in system wide scope. The only way to get it seems to be implementing my own custom keyboard extension in which I would need to lay out and implement the full fledged keyboard, and then add those custom buttons on top of it. But I would very much like to avoid implementing my own "standard" keyboard and just piggy-back either on standard keyboard (using something like system-wide keyboard). Is there a standard way to do it?
So far it seems the fastest way would be taking one of the open source keyboards mimicking the standard keyboard, e.g., Tasty Imitation Keyboard, and modifying it to my own needs. It would be better than having to reimplement the whole keyboard on my own, yet, I would still like to find a way how to extend the standard keyboard.

Editing a Keyboard in iOS

In terms of application for iOS coding, how can you manipulate the pre-existing keyboards? I want to change a button on the keyboard (for example, the A button on the English key board) to a custom image and custom output.
So I guess what I'm asking is: if and how you can access a pre-existing keyboard and if you can change the output of one of the keyboard buttons to a custom image which others will see if you send it to them?
Can't be done. There is no way to alter standard keyboards. You can add toolbars above them (via inputAccessoryView), you can't alter the actual keyboard.
You would need to create your own custom keyboard.

Cursor issue while creating Custom keyboard with UIView

My requirement was to make a application specific keyboard i.e with a different theme and different key contents as compared to the default keyboard. But the way Apple states to implement keyboard requires user effort to add it through Settings->General->Keyboard which I don't want.
So, for that I tried to implement it using a UIView and making it the inputView for UITextView and it is working perfectly fine except for one issue. I added a functionality to add a linebreak in the textView. For that the code I used is
textView.text = "\(textView.text)\n"
Now, whenever I add a linebreak through keyboard, line is changed, but a new cursor appears to blink above the old cursor. I don't know how to get rid of that.
To explain the problem in a better way, here's a GIF image of the issue.
Please help.

How to set a custom keyboard for UIWebView

How to show a custom keyboard and Input Accessory View for a editable UIWebView for iOS7 and up.
i.e: How can i set and make use a value from [UIWebView setInputView:] and [UIWebView setInputAccessoryView:]
It would be helpful to understand what you're trying to do? You can either be trying to force a specific type of keyboard such as numeric, email, etc. that will use the keyboard the user has explicitly installed on their device (or the system one).
In order to do this, you can reference this apple doc which shows you the 'type' attribute to add to an tag.
Otherwise you are asking about loading a custom keyboard that you have created from the webview. The app developer in me screams, "you should NEVER do this." If you're content is generic enough to merit putting into a webview, than it is certainly not worth loading a custom keyboard.
If you realllly need to do this, you can set keyboardDisplayRequiresUserAction to NO, then use custom javascript to request the app to perform a native function, then drop a uitextfield or uitextview directly overtop the html input field and set a custom input view on the native control. There are an obscene amount of problems with following this approach, and I sincerely hope you
Are you trying to customize the ios keyboard or you want to show an HTML keyboard?
In the first case you can look at this link: link
In the second case you can just google for it, this is the first result searching for "html keyboard".
Good luck
I believe there is no way to do this as of now. Hence, my current approach is to use a custom view below the keyboard and hide the keyboard and show the keyboard as required.

Custom keyboard with regular keyboards?

I'm creating an app that uses a custom keyboard, now if I provide the default English keyboard using the same globe icon that iOS uses, it should be able to switch to the default English keyboard fine, but I'm not sure if the user can return back to my custom keyboard from the system keyboards (assuming the user has more than 1 keyboards).
Can someone please confirm if that would be possible?
Thanks
It's not. the system keyboards have no "switch to custom keyboard" button. They're not even aware you made a custom keyboard.
What is it you're trying to accomplish? Why are you building a custom keyboard? If you tell us, maybe we can suggest an alternate way to do what you need to do.
You should set an inputAccessoryView in your UITextView with a button to toggle between your custom and the standard keyboards.
Every time the user taps the button you change myTextView.inputView between your custom keyboard and nil, which restores the original keyboard.
https://developer.apple.com/library/ios/documentation/uikit/reference/UITextField_Class/Reference/UITextField.html#//apple_ref/occ/instp/UITextField/inputView
You'll also need to reassign first responder, and also try to animate it if you want:
Animating UITextInput's textInputView
What you need is making a custom keyboard check this:
App Extension Programming Guide

Resources