问题标签 [uitextviewdelegate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7771 浏览

ios - textView:shouldChangeTextInRange:replacementText: 返回 NO,但自动更正忽略?

我遇到了以下问题,不确定这是否是 iOS 错误,或者我误解了 UITextViewDelegate 回调。仅当我使用软件键盘(即使用鼠标单击屏幕键盘)时,我才能在我的设备(iPad Retina)和模拟器上重现此行为。

考虑以下人为设计的示例项目(2014 年 1 月 9 日更新)https ://www.dropbox.com/s/1q3vqfnsmmbhnuj/AutocorrectBug.zip

这是一个简单的 UITextView,将视图控制器设置为其委托,具有以下委托方法:

我对这段代码的意图是,当用户键入一个空格(编辑:并且该空格是该行的第一个字符)时,该空格被忽略,而是发生了一些其他功能,在这种情况下 UITextView 变为黄色。

现在考虑以下步骤:

  1. 点击文本视图使其成为第一响应者
  2. 输入“Apple”,回车并记下定位
  3. 现在,输入一个空格(将文本视图变为黄色),再次输入“Apple”并回车。

预期:黄色背景和文字阅读:

观察到:黄色背景和文字阅读(由于自动更正):

看来自动更正逻辑忽略了 textView:shouldChangeTextInRange:replacementText: 的结果。

  • 这是预期的行为吗?
  • 如果是这样,它可以解决吗?

编辑 1/9/14:只有一行上的第一个空格应该被忽略,进一步的空格应该正常处理(即插入到文本中),排除了蛮力的空格条。此外,我正在文本编辑器中处理一个大字符串(可能有数十万个字符)(意味着不断的用户输入),因此每次击键都分析整个字符串不会是高效的。

0 投票
2 回答
3722 浏览

ios - 删除/插入文本后 UITextView 向上滚动

我一直在为 iOS 7 重新编写我的应用程序。它现在使用新的 TextKit API。我几乎完成了,但自从我开始进行过渡以来,还有一个问题一直让我头疼。

问题:当我在 UITextView 中输入文本时,有时视图会向上滚动隐藏光标。很难确定模式,但它似乎发生在我删除一行并且下面的文本必须向上移动之后。但只有第二次我删除了一行,并且只删除了文档中的某些行(通常只有换行符但并不总是......)

我曾尝试在 stackoverflow 上使用这些解决方案:

输入时如何阻止UITextView向上滚动

UITextView 在每插入一个新行后都会滚动,所以这些行是不可见的(iPhone OS)

在 iOS 7 中滚动到 UITextView 不稳定的底部

当 UITextView 中有 UITableView 时,还有许多其他问题导致滚动无法正常工作。我的视图中没有表视图。

我想指出,我已经继承了 UITextView 并发现它肯定是 iOS 7 调用不仅向上滚动视图。此外,更奇怪的是,当您按下后退按钮(从 UITextView 中删除一个字符)时,它会向textViewDidChangeSelection:. 这是发生问题时的调用堆栈。(当问题没有发生时,我仍然会接到两次委托委托textViewDidChangeSelection:……这似乎是正常的):

  • UITextView 委托textViewDidChangeSelection:包含要删除的字符的位置,长度为 1。(即 1050,1)
  • 再次调用UITextView 委托textViewDidChangeSelection:并包含相同的位置但长度为零。(即 1050,0)
  • scrollViewDidScroll(最多 3 次。但一般只有一次)
  • 然后 iOS 7 调用UITextView.scrollRangeToVisible:FIRST 调用的范围为 {1050,1}。这对我来说毫无意义。我知道这是在内部调用的,而不是从我的任何代码中调用的,因为调用此内部 API时没有_ensureselectionvisible任何回溯到我可能用来调用滚动事件的函数。

大概前两个调用只是选择字符,然后在内部调用 deleteBackwards。这就说得通了。不过在那之后我就瞎了。我不知道它为什么会滚动或为什么会调用scrollRangeToVisible:错误的范围。

我已经能够通过在用户编辑文本时UITextView.scrollRangeToVisible:返回 w/o call来覆盖来缓解这个问题。[super scrollRangeToVisible]我通过覆盖一些滚动视图委托调用并设置一个表示不能滚动的标志来做到这一点。对我来说,这是一个巨大的 UGLY hack,并且在某些情况下仍然会出现问题 - 例如,当我在第一次编辑时点击视图时,有时当滚动视图停止减速时。

简而言之,发生的事情是发生了滚动事件(可能是由于上一行向上移动)并且iOS出于某种原因认为光标不在视图中。更奇怪的是,即使提供了错误的范围,它确实提供了正确的位置,从而将其滚动到视图中的错误位置。更奇怪的是,它只发生在某些条件下,并且只发生在条件发生的第二种情况下。我唯一能想到的是,删除文本后 UITextView 的高度计算不正确,它认为文本的位置与实际位置不同。

提前致谢!

更新:

我设置了我之前提到的标志scrollViewDidScroll:,它不会阻止其他情况下的跳跃。但是,仍然存在向后删除文本仍然会跳过屏幕的情况。在视图仍然跳转的情况下更奇怪的是我看到我正在阻止[super scrollRangeToVisible]被调用!所以在内部发生了一些事情,另外,这导致视图滚动。

更新:

它似乎在 613 点和 670 点之间向上跳跃。我不确定是什么导致了分数的差异。它跳跃的行数也不同。我怀疑条件之间必须有相似之处。此外,当scrollViewDidScroll:被调用时,我验证了textView.selectedRange.location此调用与委托调用之间的相同textViewDidChangeSelection:

0 投票
3 回答
1702 浏览

ios - 如何设置“如果文本视图中有文本”

UIButton当用户输入 viewController 时,我有一个灰色的。还有一个UITextView。如果用户在 中输入文本UITextView,则按钮应变为红色,但如果文本视图为空白,则按钮为灰色。如果正在考虑做类似下面的事情,如果用户输入文本,它会将颜色更改为红色,但如果用户删除文本,它会保持红色而不是变回灰色。这是我正在使用的代码:

0 投票
1 回答
712 浏览

ios - 当我在已显示的情况下更改返回键类型时如何重绘 UITextview 的键盘

在 UitTextview 中,我希望键盘返回键在用户键入时像换行键一样操作,并且我希望相同的键在几秒钟不活动后变为完成键,并在触摸时关闭键盘而不是插入换行符

我已经修改了 textview 代表来执行换行与解除键盘机制,并将键盘返回键从 UIReturnKeyDefault 切换到 UIReturnKeyDone 并且换行与解除机制效果很好。我唯一的问题是,当我将返回键类型更改为 self.TextView.returnKeyType = UIReturnKeyDone; 键盘没有刷新/重绘,我看不到完成键。我试过在 UITextView 和我的主视图上做一个 setNeedsDisplay,但什么也没发生。键盘返回键不变。当键盘被关闭然后当用户重新进入 textview 时重新出现时,完成键就在这里。

我应该怎么做才能在键盘处于活动状态并显示时重绘完成键?

这是我使用的 uitextview 代表:

我到处寻找,但找不到任何有关如何在显示键盘时刷新键盘键的信息。有任何想法吗 ?感谢您的帮助

0 投票
3 回答
1822 浏览

ios - textView resignFirstResponder 未触发 UIKeyboardWillHideNotification

我有一个 UIView,其中包含UITexView一个 Button。我有一个代表UITextViewDelegate

当我第一次在 UITextView 上设置光标时,会调用委托函数"textViewShouldEndEditing",并且此函数会触发UIKeyboardWillShowNotification通知。到目前为止,一切都很好。

当我点击按钮时,我调用了 function [self.textView resignFirstResponder];,然后这个函数调用了 delegate "textViewShouldEndEditing",但是通知UIKeyboardWillHideNotification永远不会被调用。

我有一个通知监听器

有什么遗漏吗???

0 投票
1 回答
138 浏览

ios - 使用 UITextViewDelegate 更新 UITableViewCell 标签

我正在尝试使用 UItextfields 委托从 UITextField 动态更新 UITableViewCell,但它始终是后面的字符。

因此,如果我在 UITextView 中键入字母h,则 UITableViewCell 中不会发生任何事情,但是如果我在其hi中键入另一个字母,那么在 UITableViewCell 中你只会看到h

这是我的代码

如何使 UITableViewCell 同时更新为正确的值?

0 投票
2 回答
2503 浏览

ios - 子类可以使用超类Ios的委托方法吗

是否可以在子类上使用超类的委托

示例:A 类是 B 类的超类,超类 A 使用文本视图方法示例 textviewDidChange。如果我重新声明子类 B 上的方法,我能否以某种方式在子类 B 上调用超类 A 的 [super textViewDidChange],即使它不在类 A 的头文件中

0 投票
1 回答
638 浏览

ios - UITextView 自定义 UIDataDetectorTypes

我已经阅读了很多关于此的帖子,但我没有得到一个好的结果。例如,我想UIDetectorTypeUITextView.

没有办法子类来完成这个吗?苹果只有这些检测器类型而没有定制似乎很奇怪(因为它们甚至在 SDK 中有一个 twitter 键盘)。

有没有一种方法,但在必要的地方放置按钮?

0 投票
1 回答
67 浏览

ios - 编译应用时UITextView无法输入

我的应用程序有一个奇怪的错误,我不知道出了什么问题。情况是我有一个 UITextView,当我第一次触摸它在屏幕顶部开始编写消息时,在我的模拟器中以及在设备中编译时,这些都可以正常工作并且没有任何问题,但是问题是当编译它并安装在其他设备上时,因为这个 UITextView 不起作用,UITextView 出现在键盘和光标上,但是当我用键盘输入时,我不能写任何东西。

我在应用程序中有 UITextFields 并且可以工作,但具体来说,这个 UITextView 仅在其他设备中编译和安装时才起作用。

我使用委托并且方法运行良好,唯一的问题是当我在其他设备上编译和安装它时。所以,有人可能知道可能是什么问题?

0 投票
3 回答
125 浏览

ios - 当我将 UITextField 与 resignFirstResponder 结合使用时,它不是最多 1 个数字

检查最大数字是否为 1 的代码在我只使用那段代码时有效。但是当我使用 [becomFirstResponder] 添加自动跳转到下一个 UITextField 时,它不再起作用了。

非常感谢你们!

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

什么时候

MyViewController.h

我的视图控制器.m