xcode中的UITextView问题
Posted
技术标签:
【中文标题】xcode中的UITextView问题【英文标题】:UITextView trouble in xcode 【发布时间】:2012-12-17 03:58:19 【问题描述】:所以我正在阅读有关 UITextView 的描述,它说当您按下键盘上的“返回”按钮时它会自动隐藏键盘。但它不起作用,所以我尝试创建一个
- (IBAction)textViewReturn:(id)sender;
[myTextView resignFirstResponder];
那也没用,所以我也尝试过:
- (BOOL)textViewShouldReturn:(UITextView *)textView
[myTextView resignFirstResponder];
return NO;
不知道为什么整个交易一开始就不起作用。想知道是否有人可以提供帮助?
【问题讨论】:
请记住,textView 的通常 是用于允许用户输入多行文本,在这种情况下,您需要 Return 按钮不退出键盘,而是插入换行符。如果您只想要一行文本,那么 textField 可能是更好的选择。 是的,那么您建议在这种情况下如何找到隐藏键盘的方法? @lnafziger 【参考方案1】:我在UITextView Class Reference 中没有看到任何说明当您按下 Return 时它会自动隐藏键盘的内容。
另外,UITextViewDelegate
protocol 中没有 textViewShouldReturn:
消息。 UITextFieldDelegate
protocol 中有 textFieldShouldReturn:
消息,但文本视图不是文本字段。
如果你想让它在用户按下 Return 时隐藏键盘,你需要做两件事。
首先,您需要将一些对象(通常是您的视图控制器)连接到文本视图的delegate
出口。您可以在您的 nib 中执行此操作,也可以在代码中执行此操作,也许在您的 viewDidLoad
方法中:
- (void)viewDidLoad
[super viewDidLoad];
myTextView.delegate = self;
其次,你需要在你的委托对象中实现textView:shouldChangeTextInRange:replacementText:
:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
if ([text isEqualToString:@"\n"])
[textView resignFirstResponder];
return NO;
else
return YES;
请注意,如果用户粘贴包含换行符和其他字符的文本,则不会捕获换行符。它只会在用户点击 Return 键或粘贴仅包含换行符的文本时注意到。
您可以将委托的类声明为符合UITextViewDelegate
协议,在这种情况下,Xcode 将有助于自动完成方法名称。但即使类不符合协议,它也可以工作。
【讨论】:
我在这两段代码中都输入了.. 没有改变任何东西.. 我还能如何将一些对象连接到文本视图的代理出口? @robmayoff 在您的 nib 中,您可以控制并从 File's Owner 拖动到文本视图并选择delegate
插座。您还需要确保 myTextView
确实连接到您的文本视图。
我的笔尖是故事板吗? @robmayoff
在情节提要中,您需要从视图控制器占位符(在视图下方的栏中)控制并拖动到文本视图。
我已经将storyboard中的textView连接到了属性(弱,非原子)IBOutlet UITextView *myTextView;线..是你的意思吗? @robmayoff【参考方案2】:
UITextView 的返回按钮用于将光标移动到新行。但是,如果您想在返回按钮上移除键盘,请尝试以下代码。当用户按下返回按钮时,它会退出键盘。因此,请尝试以下绝对解决您问题的代码。
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
if ([text isEqualToString:@"\n"])
[textView resignFirstResponder];
return NO;
else
return YES;
【讨论】:
在这部分代码中......因为我将我的文本视图命名为 myTextView。每次放置 textView 时我都用 myTextView 替换吗? @Girish 不需要。该方法有一个 textView 参数,即当前的 textView。只需要将委托设置为 xib 中的每个 texview。 我现在很困惑。我已经写出了整个部分......没有任何改变......@Girish 在textview的delegate方法上设置debugger,如果delegates设置错了debugger来了。【参考方案3】:根据您的评论,如果您想使用UITextField
而不是UITextView
,那么事情保持不变,只是为了在您按下回车时隐藏键盘,您需要在文本字段的委托(确保您已经设置了这个):
- (BOOL)textFieldShouldReturn:(UITextField *)textField
[textField resignFirstResponder];
return YES;
【讨论】:
以上是关于xcode中的UITextView问题的主要内容,如果未能解决你的问题,请参考以下文章