UITextView在iPhone中隐藏键盘

jer*_*use 9 iphone xcode objective-c keyboard-events ios

我想在用户按下UITextViewiphone 中的对象返回时隐藏键盘.然而,神秘的是,这不适用于UITextView工作UITextField.我无法弄清楚为什么......

这就是我做的:

1)我在XCode4中创建了一个基于视图的应用程序.

2)在.xib中创建UITextView,UITextFieldUIButton对象

3)在Outlets中标记两者UITextFieldUITextView委托给File的所有者

4)<UITextFieldDelegate>在.h中添加到@interface UIViewController

5)textFieldShouldReturn在.m中添加了功能

以下是代码:

.h文件

@interface keyboardDisappearViewController : UIViewController <UITextFieldDelegate>
{

    UITextView *textBoxLarge;
    UITextField *textBoxLittle;
}
@property (nonatomic, retain) IBOutlet UITextView *textBoxLarge;
@property (nonatomic, retain) IBOutlet UITextField *textBoxLittle;

- (IBAction)doSomething:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)

.m文件

- (BOOL) textFieldShouldReturn:(UITextField *)theTextField 
{
    NSLog(@"textFieldShouldReturn Fired :)");
    [textBoxLarge resignFirstResponder];
    [textBoxLittle resignFirstResponder];
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,在textBoxLittle(UITextField)的情况下,键盘正在消失,但在textBoxLarge(UITextView)的情况下却没有

作为进一步检查我,按钮调用函数doSomething

- (IBAction)doSomething:(id)sender {
    [textBoxLarge resignFirstResponder];
    [textBoxLittle resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

当我按下按钮时,键盘在两个文本框中都消失了.

它让我疯狂为什么textFieldShouldReturn适用于小文本框,但不适用于大文本框.

请帮忙!

Rog*_*son 20

三件事:

使您的视图实现UITextViewDelegate.

@interface keyboardDisappearViewController : UIViewController
    <UITextFieldDelegate, UITextViewDelegate>
Run Code Online (Sandbox Code Playgroud)

添加以下方法:

- (BOOL)textView:(UITextView *)textView
        shouldChangeTextInRange:(NSRange)range
        replacementText:(NSString *)text
{
    if ([text isEqualToString:@"\n"])
    {
        [textView resignFirstResponder];
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

在接口构建器中将文件的所有者设置为UITextView的委托.

(顺便说一下:解决方案从评论复制到上一个答案,因为我花了一段时间才提取.我虽然其他人可以从我的经验中受益.)


Abd*_*tri 7

您需要编写代码UITextViewDelegate并将其分配给您的类.

  • -- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if ([text isEqualToString:@"\n"]) { [textView resignFirstResponder]; 返回是;} (6认同)

Ran*_*nga 5

简单的技巧delegate然后为您的文本视图设置

doSomething 
{

}
Run Code Online (Sandbox Code Playgroud)

动作连接到ext视图 control event didEndOnExit and tuchupinside


//当用户点击进入/返回时关闭键盘

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{
    if([text isEqualToString:@"\n"]) 
    {
        [textView resignFirstResponder];
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)