我已经通过stackoverflow搜索了类似的问题,并找到了适用于其他人的推荐解决方案,但没有一个能为我工作,所以我开始怀疑这是我没有做好的事情。
这很简单。我想要的是,当用户点击uitextfield时,uitextfield中的整个文本都会被选中。然后,用户可以继续全部删除,点按一次并从该点开始追加或开始输入以覆盖所有内容。
我有一个来自uitextfield的动作,这是片段。
- (IBAction)didBeginEditDescription:(id)sender
{
NSLog(@"Description began edit.");
[self.txtfield selectall:self];
}
我知道调用该方法(由NSLog显而易见)。但是,没有任何反应,光标仍然位于文本的最后位置。我已经有了UITextFieldDelegate所以不确定我还应该注意什么呢?
仅供参考,这是针对Xcode 5.0进行的,并尝试为iOS 7开发。
我有什么明显的遗失吗?
答案 0 :(得分:9)
我想您要突出显示所选UITextField
的所有文字。在这种情况下,首先您应该确定哪个UITextField
调用了该方法(-didBeginEditDescription
),然后您可以针对该特定-selectAll
调用UITextField
。
示例代码:
- (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]];
答案 1 :(得分:3)
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);
}
}
答案 2 :(得分:1)
我发现有必要将selectAll:self
拨打TouchDown:
而不是editDidBegin:
在InterfaceBuilder中将Touch Down
附加到- (IBAction)didBeginEditDescription:(id)sender
。
答案 3 :(得分:1)
对于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);
}