当用户点按“完成”时,我正在尝试让我的可编辑UITextView
辞职键盘(resignFirstResponder
)。使用UITextField
,我可以使用以下代码执行此操作:
- (IBAction)doneEditing:(id)sender {
[sender resignFirstResponder];
}
...然后将其附加到Interface Builder中的相关UITextField
,以执行“退出时已结束”操作。
然而,使用UITextView
,我似乎无法访问“退出时结束”操作。关于如何实现这一目标的任何建议?
答案 0 :(得分:88)
接受的答案对我不起作用。相反,应该像这样调用以下委托方法:
- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if([text isEqualToString:@"\n"]){
[textView resignFirstResponder];
return NO;
}else{
return YES;
}
}
将其粘贴到您指定为UITextView委托的类中,它将起作用。
答案 1 :(得分:13)
新答案
在你的视图中,你有一个连接到下面的IBAction的UIBarButton(“完成”):
- (IBAction)doneEditing:(id)sender {
[textView resignFirstResponder];
}
其中textView是您的.h文件中定义的textView插座,并连接在Storyboard或.xib文件中。像这样:
@property (retain, nonatomic) IBOutlet UITextView *textView;
旧答案
检查以下内容:
答案 2 :(得分:0)
你可以在Swift 4中实现UITextViewDelegate
并等待“\ n”:
myTextView.delegate = self
// ...
extension MyViewController : UITextViewDelegate {
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
textView.resignFirstResponder()
return false
}
return true
}
}
答案 3 :(得分:-5)
要让完成按钮关闭键盘,resignFirstResponder
必须实现委托方法。
在你的.h中实现UITextFieldDelegate
@interface YourViewController : UIViewController <UITextFieldDelegate>
然后在.m
中实现textFieldShouldReturn-(BOOL) textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
不要忘记将UITextField的委托链接到文件的所有者(非常重要)