gpt4 book ai didi

ios - 在不使用委托(delegate)方法的情况下检测 UITextView 和/或 UITextField 上的 SELECTION 更改

转载 作者:行者123 更新时间:2023-11-29 02:26:23 25 4
gpt4 key购买 nike

我正在编写自定义 UITextView,但在 UITextView 本身内部使用委托(delegate),它不再可以在其他地方使用(例如:在 UIViewController 中)。

那么,有没有一种方法可以检测用户何时更改 TextView 或文本字段中所选文本的范围,因为我需要插入符号位置。我找不到任何 NSNotification 来做这样的事情:

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(selectionDidChange:)
name: ?? // someNotification
object:textView];

然后用选择器做一些事情

-(void)selectionDidChange:(NSNotification *)notification {
//do something
}

我得到了提示here ,但不知道如何继续。

感谢任何帮助。谢谢。

最佳答案

我认为您必须为您的自定义 TextField 制定我们自己的协议(protocol)。在您的自定义文本字段中,您实现了 UItextfieldDelegate 协议(protocol),并创建了自己的协议(protocol)以防止 UIVIewController。

在你的.h中

@protocol YourCustomTextFieldDelegate <NSObject>

- (void) userDidChangeRange:(NSRange*) currentRange;

@end
@interface YourCustomTextField : UIView <UITextFieldDelegate> {
UITextField *_customTextField;
}

@property(nonatomic, weak) id<YourCustomTextFieldDelegate> delegate

在你的.m

- (void)viewDidLoad{
[super viewDidLoad];
// Do any additional setup after loading the view.
//Create your customTextField and add it to the view
_customTextField.delegate = self;

}

#pragma mark - UItextField Delegate

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange: (NSRange)range replacementString:(NSString *)string
{
[self.delegate userDidChangeRange:range];
return YES;
}

编辑:带有通知帖子在你的.h

  interface YourCustomTextField : UIView <UITextFieldDelegate> {
UITextField *_customTextField;
}

在你的.m

 - (void)viewDidLoad{
[super viewDidLoad];
// Do any additional setup after loading the view.
//Create your customTextField and add it to the view
_customTextField.delegate = self;
}

#pragma mark - UItextField Delegate

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange: (NSRange)range replacementString:(NSString *)string
{
[[[NSNotificationCenter defaultCenter] postNotificationName:@"YourNotificationName" object:self userInfo:@{@"range": range, @"textFieldTag" : @"[NSNumber numberWithInt:self.tag]}];
return YES;
}

用户将收听您的通知

 - (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rangeDiDChange) name:@"YourNotificationName" object:nil];
}

我建议您在通知中设置标签以识别您的文本字段,如果您的 View Controller 中有许多自定义文本字段,请识别它。

希望对您有所帮助。

关于ios - 在不使用委托(delegate)方法的情况下检测 UITextView 和/或 UITextField 上的 SELECTION 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27481168/

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