iPhone: keyboard blocks screen [duplicate] - iphone

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
UITableView and keyboard scrolling issue
I've got a screen which has several text fields (UITextField) for gathering information from the user which ends up taking up most of the screen. when the user selects a field the soft keyboard appears (as expected) but it covers up the fields that appear further down on the screen. In order to get to those fields the user has to close the keyboard and select them, and upon doing so, the field is covered up again and the user can't see what they're typing.
I tried wrapping the text fields in a UIScrollView, hoping that when the keyboard took up space on the screen i would be able to scroll the uppper portion of the screen down to the other text fields, but this did not work.
I'm hoping to get this scrolling behavior. Does anyone know how to do it?
-TIA

You need to adjust the height of your scroll view when the keyboard appears so that it doesn't overlap. See Managing the Keyboard in the programming guide.

There's a good answer to a similar question and some sample code here.
Basically, you register to receive the UIKeyboardWillShowNotification and the UIKeyboardWillHideNotification, then you manually scroll the view to compensate.

This is a drag and drop framework that I use in my projects as I have come across this problem a lot. It's a UIScrollView subclass and supports different auto-focus modes and a variety of other bits and bobs.
https://github.com/mackross/GTKeyboardHelper

Related

SwiftUI Form with Scrolling while Keyboard Displayed

I have a SwiftUI Form with a field that is a TextField. I would like it when the keyboard appears for the Form to not be occluded by the keyboard AND for the field to be scrolled into view.
Form {
ForEach(0..<self.fields.count) { index in
CreateField(field: self.fields[index]) // this could be any of several input types
}
}
.modifier(KeyboardHandler())
where KeyboardHandler() is any one of several solutions found on Stackoverflow to change the bottom padding of the Form when the keyboard appears/disappears.
When you use a Form (which displays things very nicely) you can expect at least one item in the Form to require the use of a keyboard. I mean, that's one of the reasons to use a Form: gather info from the user. So it surprises me that keyboard handling is not built into the Form in some way. Or rather, in a way that works without us having to do this. There are a number of keyboard solutions on Stackoverflow - this is a wheel that has been reinvented more times than the wheel itself.
I have looked at several of the solutions presented and most will change the bottom padding of the Form so that it is not occluded by the keyboard. None of the solutions I've found address the issue of scrolling the field into view.
Is that possible with SwiftUI? Should I write my own custom Form (I'd rather not)?

Search Bar in Native Meassage App in iPhone

I need to know that what type of VIEW is used in the search bar of Create Message Screen. The bar searches , adds tabs as per the contacts selected and and also gives the option of selecting contacts form contact list througha button.
I am not able to understand whether it is a UITextView ot a UIView with variable size of UITextView.
Can Anyone please help me out in this regard.
Thsnks in advance!!
Since no one has yet answered my problem, and I have found the solution so will answer my own problem.
Yes, the search bar used in the native application is a UIScrollview with variable sized UITextView that converts the selected name into Number.
Thanks

Tab Like Selection

Can anybody please tell me how they have implemented the below thing whick looks to me like a TabBar but has something different from a simple tabbar.
The thing having "Offer" and "Wall", when each one is clicked, presents a different view.
Any sample code will be appreciated
Its a custom UIButton.
EDIT: What UI element might this be? (Custom tab-bar?). I had asked the same question a few weeks ago. There are two good answers there.
And google up for custom UIButton. You can find a few samples on your search
Its a custom view. You can always implement this kind of thing by using images. Say you have 2 different images. In one image offer is selected, and in another wall is selected. And you are using an image view to show them. An invisible button is placed in proper place. After tapping the button you can set the right image. And also if the images are not overlapping then you can use custom button.

Upon exiting UISearchDisplayController's search table view, the screen flashes

I am using UISearchDisplayController to implement the search feature on a table view. My table view cell uses custom background image.
When you first type a letter into the search textfield, the search results start appearing. However, when I click cancel at this point, the screen flashes white. This is not as noticeable if everything uses the standard white, but since my table view cell uses custom background, the white flashing is quite noticeable.
Where is this flashing coming from? Is there anything I can do to remove this flashing? (You can see this flashing on standard Apple apps too but it may not be very obvious if the table view uses white background)
Another SO post mentioned this very problem too - Customize UISearchDisplayController (search for the word "Flash")
Found a good work around for this here at Apple's Dev Forums.
Basically, the flash is by design and there isn't any way to customize/disable it. However, the poster in the link came up with a simple work around -- remove the search display table view all together (removeFromSuperView). Works absolutely fine for me.

Easy way to scroll overflow text on a button?

Does anyone have any examples or resources where i might find information on scrolling text which is too long to display in a button control? I'm thinking something along these lines.
Display as much text will fit within the current rect with a '...' at the end to signify overflow.
Pause for say 1 second then slowly scroll the text to the right edge displaying the right part of the string.
Display as much text will fit within the current rect with a '...' at the beginning to signify overflow.
Start the whole thing over in reverse.
Is there an easy way to do this using the "core" or built in "animation" frameworks on a certain mobile device?
[edit]
Iwanted to add some more details as i think people are more focused on wether or not what i'm trying to accomplish is appropriate. The button is for the answers on a trivia game. It does not perform any speciffic UI function but is for displaying the answer. Apple themselves is doing this in their iQuiz trivia game on the iPod Nano and i think its a pretty elegant solution to answers that are longer than the width of my button.
In case its the '...' that is the difficult part of this. Lets say i removed this requirement. Could i have the label for the button be full sized but clipped to the client rect of the button and use some animation methods to scroll it within the clipping rect? This would give me almost the same effect minus the ellipses.
Here's an idea: instead of ellipses (...), use a gradient on each side, so the extra text fades away into the background color. Then you could do this with three CALayers: one for the text and two for fade effect.
The fade masks would just be rectangles with a gradient that goes from transparent to the background color. They should be positioned above the text layer. The text would be drawn on the text layer, and then you just animate it sliding back and forth in the manner you describe. You can create a CGPath object describing the path and add it to a CAKeyframeAnimation object which you add to the text layer.
As for whether you think this is "easy" depends on how well you know Core Animation, but I think once you learn the API you'll find this isn't too bad and would be worth the trouble.
Without wishing to be obtuse, maybe you should rethink your problem. A button should have a clear and predictable function. It's not a place to store and display text. Perhaps you could have a description show on screen with a nice standard button below?
Update with source code example:
Here is some ready to use source code example (actually a full zipped Xcode project with image and nib files and some source code), not for the iPhone, not using Core Animation, just using a couple of simple NSImages and a NSImageView. It is just a cheap hack, it does not implement the full functionality you requested (sorry, but I don't feel like writing your source code for you :-P), horrible code layout (hey, I just hacked this together within a couple of minutes, so you can't expect any better ;-)) and it's just a demonstration how this can be done. It can be done with Core Animation, too, but this approach is simpler. Composing the button animation into a NSImageView is not as nice as subclassing a NSView and directly paint to its context, but it's much simpler (I just wanted to hack together the simplest solution possible). It will also not scroll back once it scrolled all the way to the right. Therefor you just need another method to scroll back and start another NSTimer that fires 2 seconds after you drew the dots to the left.
Just open the project in Xcode and hit run, that's all there is to do. Then have a look at the source code. It's really not that complicated (however, you may have to reformat it first, the layout sucks).
Update because of comment to my answer:
If you don't use Apple UI elements at all, I fail to see the problem. In that case your button is not even a button, it's just a clickable View (NSView if you use Cocoa). You can just sub-class NSView as MyAnswerView and overwrite the paint method to paint into the view whatever you wish. Multiline text, scrolling text, 3D text animated, it's completely up to your imagination.
Here's an example, showing how someone subclassed NSView to create a complete custom control that does not exist by default. The control looks like this:
See the funny thing in the upper left corner? That is a control. Here's how it works:
I hate to say that, as it is no answer to your question, but "Don't do that!". Apple has guidelines how to implement a user interface. While you are free to ignore them, Apple users are used to have UIs following these guidelines and not following them will create applications that Apple users find ugly and little appealing.
Here are Apple's Human Interface Guidelines
Let me quote from there
Push Button Contents and Labeling
A push button always contains text, it
does not contain an image. If you need
to display an icon or other image on a
button, use instead a bevel button,
described in “Bevel Buttons.”
The label on a push button should be a
verb or verb phrase that describes the
action it performs—Save, Close, Print,
Delete, Change Password, and so on. If
a push button acts on a single
setting, label the button as
specifically as possible; “Choose
Picture…,” for example, is more
helpful than “Choose…” Because buttons
initiate an immediate action, it
shouldn’t be necessary to use “now”
(Scan Now, for example) in the label.
Push button labels should have
title-style capitalization, as
described in “Capitalization of
Interface Element Labels and Text.” If
the push button immediately opens
another window, dialog, or application
to perform its action, you can use an
ellipsis in the label. For example,
Mail preferences displays a push
button that includes an ellipsis
because it opens .Mac system
preferences, as shown in Figure 15-8.
Buttons should contain a single verb or a verb phrase, not answers to trivia game! If you have between 2 and 5 answers, you should use Radio Buttons to have the user select the answer and an OK button to have the user accept the answer. For more than 5 answers, you should consider a Pop-up Selector instead according to guidelines, though I guess that would be rather ugly in this case.
You could consider using a table with just one column, one row per answer and each cell being multiline if the answer is very long and needs to break. So the user selects a table row by clicking on it, which highlights the table cell and then clicks on an OK button to finish. Alternatively, you can directly continue, as soon as the user selects any table cell (but that way you take the user any chance to correct an accidental click). On the other hand, tables with multiline cells are rather rare on MacOS X. The iPhone uses some, but usually with very little text (at most two lines).
Pretty sure you can't do that using the standard API, certainly not with UILineBreakMode. In addition, the style guide says that an ellipsis indicates that the button when pressed will ask you for more information -for example Open File... will ask for the name of a file. Your proposed use of ellipsis violates this guideline.
You'd need some custom logic to implement the behaviour you describe, but I don't think it's the way to go anyway.
This is not a very good UI practice, but if you still want to do it, your best bet is to do so via a clickable div styled to look like a button.
Set the width of the div to an explicit value, and its overflow to hidden, then use a script executing on an interval to adjust the scrollLeft property of this div.