gpt4 book ai didi

ios - 带有 leftViewMode 的 UITextField UITextFieldViewModeUnlessEditing 在编辑时保持可见

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:14 24 4
gpt4 key购买 nike

我有一个 UITextField 子类对象和 leftView,leftViewMode 设置为 UITextFieldViewModeUnlessEditing。但是,左 View 在编辑过程中保持可见,直到用户输入至少一个字符。

在输入文本之前:

enter image description here

输入文字后:

enter image description here

问题:

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

  2. 左 View 在编辑期间不可见,在任何字符被编辑之前进入?

最佳答案

回答您的问题:

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

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

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

@interface ViewController () <UITextFieldDelegate>

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

@end

然后您可以配置叠加 View 并在 viewWillAppear: 中注册委托(delegate)通知,如下所示:

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

要使覆盖 View 在用户触摸文本字段时立即消失,请将 leftView(或 rightView)属性设置为 nil编辑开始时。只需确保将其设置为在编辑结束时再次指向您的自定义 View 即可。

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
self.textField.leftView = nil;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
self.textField.leftView = self.customView;
}

编辑

一种更通用的方法是在编辑开始和结束时简单地切换模式,这样就无需维护对叠加 View 的引用。

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
self.textField.leftViewMode = UITextFieldViewModeNever;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
self.textField.leftViewMode = UITextFieldViewModeUnlessEditing;
}

关于ios - 带有 leftViewMode 的 UITextField UITextFieldViewModeUnlessEditing 在编辑时保持可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16852477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com