I have UILabel placed inside of UIViewController in Storyboard, correctly connected via outlets, everything as usual. This is how it looks like in Interface Builder.
When I simply run my app it looks like it should.
But when I set text programmatically using simple .text property, label breaks its style.
Whats going on with my label? I don't use custom class or any custom logic except setText via property. Why it dismisses IB style after setText?
upd
Here is complete screenshot of IB attributes
Probably the attributedText is set by your initial configuration, so when you set text all of the attributed text information gets removed. Consider taking a mutable copy of the attributedText and updating it (or just replacing the attributedText with something new).
Related
I have a description of myObject and i show it in UILabel. I want to add 'More' button to my UILabel if a description is too long. On Github i have found TTTAttributedLabel which allows to use hyperlinks. The question is, is there some special features in UILabel or UITextView to resolve my issue or i have to use TTTAttributedLabel?
The best option is certainly to use TTTAttributedLabel.
UILabel and UITextView are designed simply for showing static text. There is no method for adding tappable elements.
As an alternative, before I leaned of TTTAttributedLabel I simply placed a UIButton with a custom style over my UILabel. The button was invisible but still responded to taps. This works best for static text though, as the button needs to be placed correctly on the interface to cover the correct part of the text.
With TTTAtributtedLabel is pretty easy to add a "MORE" text at the end.
You have truncationTokenString and truncationTokenStringAttributes. Super easy!
Example:
[label setTruncationTokenString:#"... MORE"];
https://github.com/mattt/TTTAttributedLabel
Documentation: http://cocoadocs.org/docsets/TTTAttributedLabel/1.8.0/Classes/TTTAttributedLabel.html#//api/name/truncationTokenString
In my case I don't need anything more because I just change the numberOfLines when the cell is selected to make it grow.
You can try the 3rd library ExpandableLable written by Swift.
Set the custom class of your UILabel to ExpandableLabel and set the desired number of lines and collapsed text:
expandableLabel.numberOfLines = 5
expandableLabel.collapsedAttributedLink = NSAttributedString(string: "more")
expandableLabel.ellipsis = NSAttributedString(string: "...")
// update label expand or collapse state
expandableLabel.collapsed = true
You may need set a delegate to get notified in case the link has been touched.
I am new to iPhone development and I am looking at exactly what is shown in the picture to allow users to write input.
But I cannot find what exactly is it! Are those some special kind of UITextFields? Are they a special kind of UITableView? What is it?
This is a UITableView with custom UITableViewCell's that contain UITextFields. You can easily do this by loading your UITableViewCell from custom XIB files, in which you've dropped UITextFields. As far as the "hints" you see in each field, that's the "Placeholder" property of UITextField.
Those are grouped tableviews with custom table cells that contain textfields and single line etched separators. Make sure to set the style to "grouped"
The above basically consist of UItableviewCell with a Uitextfield within it.
If you are on ios5 (which i assume you will be), you can add UItableviewcontroller from you Interface Builder and from there, taking the advice to set the style of the table to "grouped".
you should have the similar outlook of the above for the background.
In here, if you select a cell you should have the option to set a few different style to your uitableview cell.
If none of the default styles works for you, just select custom and add your own uitextfield or uibutton.
Note: There's a bit of difference between prototype cell.
Look this pic:
The usernames are UIButton. How can I put a UILabel (with the comment text) just after the UIButton (with the username) ?
The UIButton username's is dynamic. How can I do this?
That looks like a UITableView, if that's the case you should subclass UITableViewCell. If it isn't, I would
consider making it one
build a container class that (or make your subclassed UITableViewCell such that it) contains both a UIButton and a UILabel and dynamically position the text inside the label according to the size of the button (for instance, adding the right number of spaces to the beginning of the text).
You're going to have to use Core Text or web views to achieve this. There's really not a super easy way to do this. It's simple enough to place view next to each other based on their calculated sizes, but to have text wrap to multiple lines with embedded font style variations and attachments (i.e., images), you're going to have to read up on Core Text or use XHTML in web views.
I have a ViewController consisting of just a textView. In its viewDidLoad method, I simply initialize the textView and add it as a subview. In my main ViewController class, when the user presses a button, I switch views and display the view that has the textView. I am trying to change the textView's text however it is not working. Can I not change the text of a UITextView at runtime?
Thanks.
You should keep a reference to your text view.
If you do, then make sure that the reference is correct and valid before setting the new text.
In general, it always helps when you post a problematic code - this way it is much easier for us to help you...
Is there a standard way to set up a table to allow editing-in-place, kind of like this:
I only need editable text at the moment, but I might need UISwitches or UISliders in the future.
Yep. Just add a UITextField, with its font and textColor set to appropriate values, as subviews of the table cell's contentView. You probably want to give the field a tag as well, so that you can easily grab a reference to it using the contentView's -viewWithTag: method.
With short forms you can get away with keeping an array of cells, one for each field, and handing them off to the table view without going through the -dequeueReusableCellWithIdentifier: mechanism, but if you've got a lot of stuff to enter then it gets more complicated. In that case, you probably want to assign a different reuse identifier to each type of cell—one for text-field cells, one for switch cells, one for slider cells, etc. Once you've dequeued or created the row's cell, you'd then grab its control from the content view (as above) and set its value from wherever you've stored that.
Edit in-place using a "Content: Static Cells" and make it look like a default styled UITableviewCell.
In UITableView create two cells: one Custom and one Subtitle Styled.
Copy the "title" label corresponding to the Subtitle styled UITableViewCell to the Custom UITableViewCell.
In Custom UITableViewCell, drop a UITextField. Copy in this the style parameters from the Detail UILabel from Subtitle Styled UITableViewCell in this UITextField.
Do the necessary arrangements.
The looks pretty equal, aren't they?
Now, do the IBoutlet stuff.