Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UITextField highlight all text

I have searched through stackoverflow for a similar problem and found recommended solutions that worked for others but none of them worked for me so I'm beginning to suspect that it's something I haven't done properly.

It's very simple. All I want to have is that when the user taps on the uitextfield, the entire text within uitextfield get selected. The user can then proceed to delete it all, tap once and append from that point onwards or start typing to overwrite everything.

I have an action from the uitextfield and here's the snippet.

- (IBAction)didBeginEditDescription:(id)sender
{
    NSLog(@"Description began edit.");

    [self.txtfield selectall:self];
}

I know the method is called (evident by the NSLog). However, nothing happens and the cursor remains to be at the last position of the text. I have UITextFieldDelegate already so not sure what else I should look at?

FYI, this is being done to Xcode 5.0 and trying to develop for iOS 7.

Is there anything obvious that I'm missing?

like image 730
Gino Avatar asked Oct 02 '13 10:10

Gino


2 Answers

I think you want to highlight all the text of selected UITextField. In that case, first you should identify which UITextField called that method (-didBeginEditDescription) and then you can call -selectAll for that particular UITextField.

Sample Code :

- (IBAction)didBeginEditDescription:(id)sender
{
    NSLog(@"Description began edit.");
    UITextField *txtFld = ((UITextField *)sender);
    [txtFld selectAll:self];
}

Update :

-selectAll should work. I already implemented and it is working very well for me. Note that, you have written -selectall instead of -selectAll. You can also try like this :

[txtFld setSelectedTextRange:[txtFld textRangeFromPosition:txtFld.beginningOfDocument toPosition:txtFld.endOfDocument]]; 
like image 150
Bhavin Avatar answered Nov 01 '22 08:11

Bhavin


Xamarin iOS:

nativeTextField.EditingDidBegin += (object sender, EventArgs eIos) =>
                {
                   nativeTextField.PerformSelector(new Selector("selectAll"), null, 0.0f);
                };

Xamarin.Forms custom renderer for iOS:

using System;
using CoreText;
using ObjCRuntime;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;


[assembly: ExportRenderer(typeof(Entry), typeof(MyEntryRenderer))]
namespace Hello.iOS
{    
    public class MyEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);    
            if (Control != null)
            {
                var nativeTextField = (UITextField)Control;    
                nativeTextField.EditingDidBegin += (object sender, EventArgs eIos) =>
                {
                   nativeTextField.PerformSelector(new Selector("selectAll"), null, 0.0f);
                };                           
            }
        }

    }

Xamarin.Forms custom renderer for Android:

  protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);

        if (Control != null)
        {


            EditText editText = null;

            for (int i = 0; i < ChildCount; ++i)
            {
                Android.Views.View view = (Android.Views.View)GetChildAt(i);
                if (view is EditText) editText = (EditText)view;
            }

            editText?.SetSelectAllOnFocus(true);            

        }
    }
like image 4
Nick Kovalsky Avatar answered Nov 01 '22 09:11

Nick Kovalsky