gpt4 book ai didi

iphone - UITextField 用 NSUndoManager 支持替换文本

转载 作者:可可西里 更新时间:2023-11-01 05:41:47 26 4
gpt4 key购买 nike

我只是用一个简单的

self.customerTextField.text = @"text";

但我希望有撤消支持,如果他们摇晃手机就可以撤消更改。

我有点不知道如何完成这个。我找到的所有示例都是针对 UITextView 的。

========================代码的当前迭代=================== ===

-(void)getUniqueItemID {

[self.inventoryLibrarian generateUniqueItemIDwithCompletionBlock:^(NSString *string) {

[self undoTextFieldEdit:string];
//self.customTextField.text = string;

}];

}

- (void)undoTextFieldEdit: (NSString*)string
{
[self.undoManager registerUndoWithTarget:self
selector:@selector(undoTextFieldEdit:)
object:self.customTextField.text];
self.customTextField.text = string;
}

-(BOOL)canBecomeFirstResponder {
return YES;
}

最佳答案

摇动撤消
将此行放入您的 appDelegate 的 application:didFinishLaunchingWithOptions: 方法中:

    application.applicationSupportsShakeToEdit = YES;

并在相关的viewController.m中

    -(BOOL)canBecomeFirstResponder {
return YES;
}

此代码的其余部分放在 viewController.m 中

属性(property)
把它放在类扩展中......

    @interface myViewController()
@property (weak, nonatomic) IBOutlet UITextField *inputTextField;
@end

将其链接到 Interface Builder 中的文本字段。

撤消方法
将自身的调用添加到重做堆栈

    - (void)undoTextFieldEdit: (NSString*)string
{
[self.undoManager registerUndoWithTarget:self
selector:@selector(undoTextFieldEdit:)
object:self.inputTextField.text];
self.inputTextField.text = string;
}

(我们不需要创建一个 NSUndoManager 实例,我们从 UIResponder 父类(super class)继承了一个实例)

撤消操作
摇动撤消不需要,但可能有用...

    - (IBAction)undo:(id)sender {
[self.undoManager undo];
}
- (IBAction)redo:(id)sender {
[self.undoManager redo];
}

撤消方法的调用
这里有两个不同的改变 textField 内容的例子……

示例 1
通过按钮操作设置 textField 的内容

    - (IBAction)addLabelText:(UIButton*)sender {
[self.undoManager registerUndoWithTarget:self
selector:@selector(undoTextFieldEdit:)
object:self.inputTextField.text];
self.inputTextField.text = @"text";
}

冒着失去清晰度的风险,我们可以将其缩短为:

    - (IBAction)addLabelText:(UIButton*)sender {
[self undoTextFieldEdit: @"text"];
}

因为 undoManager 调用在两种方法中是相同的

示例 2
直接键盘输入编辑

    #pragma mark - textField delegate methods

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
[self.undoManager registerUndoWithTarget:self
selector:@selector(undoTextFieldEdit:)
object:textField.text];
return YES;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
//to dismiss the keyboard
[textField resignFirstResponder];
return YES;
}

关于iphone - UITextField 用 NSUndoManager 支持替换文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14244928/

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