UITextView没有事件
-
22-07-2019 - |
题
我正在开发一个iPhone应用程序,它需要一个多行文本字段(UITextView)来捕获一些文本。
当用户触摸 textView 内部时,它会成为firstResponder 并显示键盘。我真正需要它做的是当用户完成时移除键盘。通常,在文本字段中,按返回/完成按钮将发出输入结束的信号,我将使用委托来退出第一响应者。但是,对于多行文本视图,我希望用户能够添加新行,因此这是不可能的。
如果在文本视图之外进行了修改,我的下一个选择是辞去第一响应者的职务。这里的问题是,在 UITextView 上没有声明任何事件,我可以在界面生成器中看到这些事件。
如何在 iPhone 应用程序中创建多行文本字段,以便在用户完成操作后在合理的时间释放第一响应者?
解决方案
可以使用导航栏上的完成按钮:
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneAction:)];
}
以关闭该键盘,具有类似事件进行处理:
- (void) doneAction: (id) sender{ [textView resignFirstResponder]; }
(记住h文件声明)
其他提示
我猜你都在感叹这是返回上一个多行UITextView中的键盘上的“失踪”完成按钮,纠正我,如果我错了。
最明显的方法似乎有你的界面,辞职第一响应另一个按钮。
我不认为在某些情况下隐藏键盘一些聪明的代码将是非常直观的使用。
在苹果的Notes应用程序使用它的右上方完成按钮辞职第一响应者,这样的做法似乎是合理的。
//If user touches outside of the keypad, then the keypad will go away
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
if (touch.tapCount >= 1) {
[ZLabel resignFirstResponder];
}
}
可以创建一个不可见按钮,涵盖所有屏幕并且比添加一个方法到它。我认为某事像这样将工作。
- (IBAction)backgroundClick:(id)sender{
[textView resignFirstResponder];
}
如果你是完全在具有键盘上的“完成”键设置,我使用的方法是检查的最后一个字符中的UITextView时的内容变化。如果最后一个字符是一个新行,则该用户已达到完成按钮。我想第二尼尔的看法,认为应该有另一个按钮,但有时客户得到客户需要什么。
显然,你必须设置委托的UITextView的指向在该方法中居住类。该方法- (void)textViewDidChange:(UITextView *)inTextView
是UITextViewDelegate协议的一部分。
- (void)textViewDidChange:(UITextView *)inTextView {
NSString *text = inTextView.text;
if ([text length] > 0 && [text characterAtIndex:[text length] -1] == '\n') {
message = [text substringToIndex:[text length] -1];
[delegate messageEdited];
[self removeFromSuperview];
}
}
(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)范围替换文本:(NSString *)text {
[txtView resignFirstResponder];
返回是;}