带有leftViewMode的UITextField UITextFieldViewModeUnlessEditing在编辑时仍然可见

时间:2013-05-31 07:56:37

标签: ios objective-c uitextfield

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

输入文字之前:

enter image description here

输入文字后:

enter image description here

问题:

  1. 是否期望并记录此行为?我怎样才能确保

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

4 个答案:

答案 0 :(得分:3)

回答你的问题:

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

  2. 您可以通过实施UITextFieldDelegate方法进一步自定义默认行为,例如,即使文本字段为空,也会在编辑开始后立即删除叠加层视图。

  3. 例如,假设您定义了一个属性来保存对自定义叠加层视图的强引用:

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

答案 1 :(得分:0)

请使用UITextFieldViewModeAlways尝试此代码,并使用par星形图像宽度指定填充。

将此代码放在viewDidLoad方法

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

它将使用左边距管理占位符文本以及textField文本。

我希望它会对你有所帮助。

答案 2 :(得分:-1)

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

leftViewMode = UITextFieldViewModeAlways;

而不是

leftViewMode = UITextFieldViewModeUnlessEditing;

答案 3 :(得分:-2)

创建leftview

     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];