4

我有一个 UITextField 子类对象和 leftViewleftViewMode设置为UITextFieldViewModeUnlessEditing. 但是,在用户输入至少一个字符之前,左视图在编辑过程中仍然可见。

输入文字前:

在此处输入图像描述

输入文字后:

在此处输入图像描述

问题:

  1. 这种行为是预期的并记录在案吗?我怎样才能确保

  2. 在输入任何字符之前,左视图在编辑过程中是不可见的?

4

4 回答 4

3

在回答您的问题时:

  1. 是的,这似乎是预期UITextField的行为,尽管在我能找到的任何官方文档中都没有明确说明。

  2. 您可以通过实现方法来进一步自定义默认行为UITextFieldDelegate,例如,在编辑开始时立即删除覆盖视图,即使文本字段为空。

例如,假设您定义了一个属性来保存对自定义覆盖视图的强引用:

@interface ViewController () <UITextFieldDelegate>

@property (strong, nonatomic) IBOutlet UITextField *textField;
@property (strong, nonatomic) UIView *customView;

@end

然后,您可以在 中配置覆盖视图并注册委托通知viewWillAppear:,如下所示:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.customView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 30.0, 30.0)];
    self.customView.backgroundColor = [UIColor orangeColor];
    self.textField.leftView = self.customView;
    self.textField.leftViewMode = UITextFieldViewModeUnlessEditing;

    self.textField.delegate = self;
}

要使覆盖视图在用户触摸文本字段时立即消失,请将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;
}
于 2014-08-29T17:36:07.737 回答
0

请使用 UITextFieldViewModeAlways 尝试此代码,并将填充分配为标准星形图像宽度。

将此代码放在 viewDidLoad 方法中

    UIImageView *iView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@" "]];
    [UITextField appearanceWhenContainedIn:[UISearchBar class], nil].leftView = iView;

它将管理占位符文本以及带有左填充的 textField 文本。

我希望它会帮助你。

于 2014-09-01T14:50:58.637 回答
-1

您需要设置模式textfield之后它才能完美运行。所以用这个

leftViewMode = UITextFieldViewModeAlways;

代替

leftViewMode = UITextFieldViewModeUnlessEditing;
于 2013-05-31T08:15:07.867 回答
-2

创建左视图

     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];
于 2013-05-31T10:49:30.373 回答