Ios 具有leftViewMode的UITextField UITextFieldViewModeUnlessEditing在编辑时保持可见
我有一个UITextField子类对象和leftView,其Ios 具有leftViewMode的UITextField UITextFieldViewModeUnlessEditing在编辑时保持可见,ios,objective-c,uitextfield,Ios,Objective C,Uitextfield,我有一个UITextField子类对象和leftView,其leftViewMode设置为UITextFieldViewModeUnlessEditing。但是,左视图在编辑过程中保持可见,直到用户输入至少一个字符 在输入文本之前: 输入文本后: 问题: 这种行为是预期的并有记录的吗?我如何确保 编辑期间,在编辑任何字符之前,左视图不可见 进入 您需要设置textfield的模式,然后它才能正常工作。所以用这个 leftViewMode = UITextFieldViewModeAlways
leftViewMode
设置为UITextFieldViewModeUnlessEditing
。但是,左视图在编辑过程中保持可见,直到用户输入至少一个字符
在输入文本之前:
输入文本后:
问题:
您需要设置
textfield
的模式,然后它才能正常工作。所以用这个
leftViewMode = UITextFieldViewModeAlways;
而不是
leftViewMode = UITextFieldViewModeUnlessEditing;
创建左视图
UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)];
textField.leftView = paddingView;
textField.leftViewMode = UITextFieldViewModeAlways;
and you can add UIImageView on this paddingView for your star.png
UIImageView *img=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"star.png"]];
img.frame=CGRectMake(0, 0,5, 20);
[paddingView adsubview:img];
回答你的问题:
UITextField
行为,尽管在我能找到的任何官方文档中都没有明确说明UITextFieldDelegate
方法进一步自定义默认行为,例如,在编辑开始时删除覆盖视图,即使文本字段为空@interface ViewController () <UITextFieldDelegate>
@property (strong, nonatomic) IBOutlet UITextField *textField;
@property (strong, nonatomic) UIView *customView;
@end
要使覆盖视图在用户触摸文本字段时立即消失,请在编辑开始时将leftView
(或rightView
)属性设置为nil
。只需确保在编辑结束时再次将其设置为指向自定义视图即可
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
self.textField.leftView = nil;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
self.textField.leftView = self.customView;
}
编辑
一种更通用的方法是简单地在编辑开始和结束时切换模式,这样就不需要维护对覆盖视图的引用
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
self.textField.leftViewMode = UITextFieldViewModeNever;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
self.textField.leftViewMode = UITextFieldViewModeUnlessEditing;
}
请尝试使用UITExtFieldVIEWMIDWORD代码,并以PAR星图像宽度指定填充。
将此代码放入viewDidLoad方法中 UIImageView *iView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@" "]];
[UITextField appearanceWhenContainedIn:[UISearchBar class], nil].leftView = iView;
它将管理占位符文本以及带有左填充的文本字段文本
我希望它能帮助您。我需要使用leftViewMode=UITextFieldViewModeUnlessEditing…(因为除非用户编辑文本,否则应显示星形按钮)这就是问题所在!这不是预期的行为。如果您使用的是
UITextField
的自定义子类,请发布相关代码。@jlehr--我可以用一个普通的UITextField重现这个问题。@Justin真的吗?怎么做?@jlehr我在XIB中有一个裸露的UITextField
。在我的例子中,我将rightView
设置为空UIView
,并使用纯色背景色进行测试。我将rightViewMode
设置为UITextFieldViewModeUnlessEditing
。尽管如此,当我第一次点击空字段以聚焦它时,rightView
仍然可见。我已经收到了所有的编辑代理回调,所以我知道该字段认为自己是“编辑”字段。只要我输入一个字符,它就会消失。你自己用不同的结果测试过吗?@Justin,是的,我无法重现所描述的行为,所以可能需要一些特定的设置来触发问题。我担心会是这样。你能想出一个系统UI控件来匹配这种隐藏和显示侧视图的模式吗?我试图为默认行为“预期”找到一些理由。@Justin不确定我是否完全遵循了你的问题。是否存在一些您无法解决的特定问题?我可以看到UITextField
会这样做,但我不相信它应该这样做。我正在寻找任何一个例子,从操作系统或苹果应用程序,显示默认的UITextField
侧视图模式,在输入字符后隐藏侧视图。如果我能找到一个,那么这是最有可能的“预期”行为。如果我不能,并且大多数应用程序展示了我认为是当字段开始编辑时隐藏的可预测的和优选的模式,那么公平地提交一个bug报告。(这也不影响赏金,这是我授予的第二个。我只想确保您的答案反映了我们关于预期行为的结论。)问题是如何隐藏图像,而不是偏移图像。
UIImageView *iView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@" "]];
[UITextField appearanceWhenContainedIn:[UISearchBar class], nil].leftView = iView;