I have an NSTextView that i assign an array of single words to be its string :
outputTextview.string? = respArray.joinWithSeparator(" ")
What i want to do is: i want to add an action to be executed as the user clicks on one of the words in the text view to do some changes to the clicked word.
or is it possible to assign each word in the array to an object that gets added to the text view and recognizes click (I'm not sure this would work cause i at the end i want the objects in textview to be selectable as a sentence an be copyable as text).
Related
I want to edit the text in a cell by tapping and I was wondering if there is a way to do it other than by adding a text field. is there something in the table view delegate that I missed?
You can create cell (or any other UIResponder subclass) that conforms UITextInput protocol (or maybe UIKeyInput is enough). Here is simple example (old link)
Notice,
you should set cell.canBecomeFirstResponder = true.
To show keyboard use cell.becomeFirstResponder()
Maybe there something else, that you should do. I recommend reading docs.
...Or use UITextField :)
We use an array to display no of text label in cell.
so you can do is, you can use a text field and a button on a view.
In button action add a line of code like stringArray[2] = "new string" to replace the particular element from array and when you enter a text and press a button the element will get replaced and just reload the table view.
And you can also write the method in didSelectRowAtIndexPath, write stringArray[indexPath.row] = "new string" and reload the table view and it is done.
Edit: in a macOS project
I have a simple ViewController which I display as popover on a status item menu app.
I change the text of the view text with a NSTableView, depending of which item is clicked. The code I use is similar to this one:
mainTextField.insertText(newStr, replacementRange: theRange)
(I use insertText for the purpose to have the change recorded in undo manager)
Then I highlight the text:
// create the new NSRange
let range = NSRange(location: startRange, length: newStrLength)
// select the range in field
mainTextField.selectedRange = range
All work fine, except that the text is highlighted but with a light grey instead of the usual sky blue, indicating that the control is not the first responder. And when I click on the field the selection disappear.
Actually I would like that the NSTextView becomes first responder so I can directly copy the selected text.
Edit: if I press Tab key on the keyboard I got the textView to become first responder (and the grey selection becomes standard sky blue).
Corrected Answer
In AppKit, you need:
if mainTextField.acceptsFirstResponder {
mainTextField.window?.makeFirstResponder(mainTextField)
}
In this case, it's probably safe to not check acceptsFirstResponder, but it doesn't hurt either.
Original Answer (UIKit)
You need to call mainTextField.becomeFirstResponder().
I have a table view in which each row contains various information like name, picture, message etc.
This message may contain some words starting with '#' or '#'. I want to make these words clickable and on click i want to open another view controller instead of browser.
I know we can set UIDataDetector type on textview for links but that only works for links.
Is there any way so that I can tell textview to detect text matching some regular expression and then make that text clickable ?
EDIT:
Finally I am able to achieve this, for those who are still dealing with this issue, I have written a blog post:
http://www.uditagarwal.com/2013/10/make-different-words-in-uitextview.html
Answer : GLTapLabel
There is a method named -drawTextInRect in class named GLTapLabel which contains one line of code :
BOOL hot = [word hasPrefix:#"#"] || [word hasPrefix:#"#"];
You just have to change the prefix values here and you will have your desired result.
There is one delegate method named -labledidSelectedHotWord. You can write here the code about the action you want to perform when the word with desired prefix is clicked. In your case, you can write your navigation code in this method.
Here is the Screenshot :
On View1, I have an empty textView that will populate with data from a textField. The textField is on View2. Every time I swipe right to view the data in View1, it never lists in the textView. It overwrites whatever is currently there.
Here's my code: https://github.com/dward1289/Objective-CII/tree/master/week4Proj
The assignment is already done, but even after it was graded I never found out what I was doing wrong. Please take a look, and tell me what I can change so that the textField data will populate in the textView and not overwrite the current text.
I guess you want to append the new input to the old information
. If so,
-(void)DidClose:(NSString*)nameString
{
txtView.text = [txtView.text stringByAppendingString:nameString];
}
I am creating a sign up page for my iphone app and am having some problems making the way the input views work for the different kinds of fields consistent. The fields are listed as cells in a table view and the editing is supposed to take place directly in the table by having appropriate input views sliding up from the bottom.
Let me focus on only two of the fields here, namely the username field and the birthday field: for the username field it makes sense to have an ASCII capable keyboard sliding up when the user presses the field whereas a date picker seems more useful in the birthday field case.
For both the keyboard and the date picker the cancel button could be located in a tool bar just above the input view. But what about the set button? If I put that in the toolbar as well I need the return key in the keyboard to go away! But that is not possible is it?
If the return key cannot be removed then I might have to live with the set button in the toolbar only in the birthday case and then use the return key as the set button in the username case - but can I then at least change the text on the return key to "Set"?
No it's not possible* to hide the "Return" key.
It is not possible to set the string to "Set" either, but could use the .returnKeyType property to change it to a limited set of strings.
theTextField.returnKeyType = UIReturnKeyDone;
(* Well you could put an opaque UIView directly above it but it's a very bad practice and generally breaks if the user chooses a different input method)