【问题标题】:UITextField highlight all textUITextField 突出显示所有文本
【发布时间】:2013-10-02 10:00:47
【问题描述】:

我已经通过 stackoverflow 搜索了类似的问题,并找到了对其他人有用但没有一个对我有用的推荐解决方案,所以我开始怀疑这是我没有正确完成的事情。

这很简单。我想要的是,当用户点击 uitextfield 时,uitextfield 中的整个文本都会被选中。然后,用户可以继续将其全部删除,点击一次并从该点开始追加或开始输入以覆盖所有内容。

我有一个来自 uitextfield 的操作,这里是 sn-p。

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

    [self.txtfield selectall:self];
}

我知道该方法被调用(从 NSLog 可见)。但是,什么也没有发生,光标仍然在文本的最后一个位置。我已经有了 UITextFieldDelegate,所以不确定我还应该看什么?

仅供参考,这是针对 Xcode 5.0 完成的,并正在尝试为 iOS 7 开发。

我有什么明显的遗漏吗?

【问题讨论】:

    标签: iphone uitextfield ios7 xcode5 selectall


    【解决方案1】:

    我认为您想突出显示所选UITextField 的所有文本。在这种情况下,首先您应该确定哪个UITextField 调用了该方法(-didBeginEditDescription),然后您可以为该特定UITextField 调用-selectAll

    示例代码:

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

    更新:

    -selectAll 应该可以工作。我已经实施了,它对我来说效果很好。请注意,您写的是-selectall 而不是-selectAll。你也可以这样试试:

    [txtFld setSelectedTextRange:[txtFld textRangeFromPosition:txtFld.beginningOfDocument toPosition:txtFld.endOfDocument]]; 
    

    【讨论】:

    • 我刚刚尝试过,但没有任何区别。这很奇怪,但我很欣赏你的回应。
    • @Gino:检查我的更新。
    • 我复制了您的 sn-p,因此拼写错误已更正。我毫不怀疑这可能是正确的代码。这一定是我没有做的其他事情。您建议的替代方案也没有给我正确的结果。还有什么我应该做的吗?也许在 IB 上或代码中的其他地方?
    • @Gino :我可以建议您在代码中看到的更改。我已经看到了您上面的代码,并告诉了您所需的更改。您必须使用断点逐行检查您的代码。只有我能告诉你的是“祝你好运”。 :)
    【解决方案2】:

    Xamarin iOS:

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

    适用于 iOS 的 Xamarin.Forms 自定义渲染器:

    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);
                    };                           
                }
            }
    
        }
    

    适用于 Android 的 Xamarin.Forms 自定义渲染器:

      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);            
    
            }
        }
    

    【讨论】:

      【解决方案3】:

      我发现有必要在TouchDown: 上调用selectAll:self 而不是editDidBegin:

      在 InterfaceBuilder 中将 Touch Down 附加到 - (IBAction)didBeginEditDescription:(id)sender

      【讨论】:

      • 是的,我发现了同样的事情。请注意,它添加了选择句柄,这很烦人。
      【解决方案4】:

      对于 Xamarin.Forms,使用此方法创建自定义渲染器:

      protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
      {
          base.OnElementChanged(e);
          if (e.NewElement == null) return;
          Control.EditingDidBegin += (sender, e) => Control.PerformSelector(new ObjCRuntime.Selector("selectAll"), null, 0.0f);
      }
      

      【讨论】:

        猜你喜欢
        • 2011-11-10
        • 1970-01-01
        • 1970-01-01
        • 2014-05-02
        • 1970-01-01
        • 2016-08-21
        • 2017-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多