har*_*alb 75 iphone uitextview uitextviewdelegate ios
我正在给一个文本视图来推特一些字符串.
我正在应用以下方法将字符数限制为140.
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if([text isEqualToString:@"\b"]){
DLog(@"Ohoooo");
return YES;
}else if([[textView text] length] > 140){
return NO;
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
除了退格不起作用的第一个条件之外,代码运行良好.假设我已达到140个字符的限制,因此该方法将给我假,用户无法插入更多字符,但在此之后,当我尝试删除某些字符时,文本视图的行为与禁用时相同.
那么问题是如何从textview.text
文本视图中删除字符或重新启用文本视图.
Tim*_*Tim 151
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
return textView.text.length + (text.length - range.length) <= 140;
}
Run Code Online (Sandbox Code Playgroud)
这可以解释用户剪切文本,或删除长于单个字符的字符串(即,如果他们选择然后点击退格键),或者突出显示范围并将字符串粘贴的时间比它短或长.
Swift 2.0版本
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
return textView.text.count + (text.count - range.length) <= 140
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*har 63
你应该寻找一个空字符串,正如苹果参考文献所说的那样
如果用户按下Delete键,则范围的长度为1,空字符串对象将替换该单个字符.
我认为你实际想做的检查就像是[[textView text] length] - range.length + text.length > 140
为了解决剪切/粘贴操作.
Roh*_*dia 16
对于swift 4:
//MARK:- TextView Delegate
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
//300 chars restriction
return textView.text.count + (text.count - range.length) <= 300
}
Run Code Online (Sandbox Code Playgroud)
小智 10
但是你也可以使用下面的工作代码..
- (void)textViewDidChange:(UITextView *)textView{
NSInteger restrictedLength=140;
NSString *temp=textView.text;
if([[textView text] length] > restrictedLength){
textView.text=[temp substringToIndex:[temp length]-1];
}
}
Run Code Online (Sandbox Code Playgroud)
使用 Swift 5 和 iOS 12,尝试以下textView(_:shouldChangeTextIn:replacementText:)
方法的实现,这是UITextViewDelegate
协议的一部分:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
guard let rangeOfTextToReplace = Range(range, in: textView.text) else {
return false
}
let substringToReplace = textView.text[rangeOfTextToReplace]
let count = textView.text.count - substringToReplace.count + text.count
return count <= 10
}
Run Code Online (Sandbox Code Playgroud)
range
( NSRange
) 到rangeOfTextToReplace
( Range<String.Index>
)的转换。请参阅此视频教程以了解为什么这种转换很重要。textField
的smartInsertDeleteType
值设置为UITextSmartInsertDeleteType.no
。这将防止在执行粘贴操作时可能插入(不需要的)额外空间。下面的完整示例代码展示了如何textView(_:shouldChangeTextIn:replacementText:)
在 a 中实现UIViewController
:
import UIKit
class ViewController: UIViewController, UITextViewDelegate {
@IBOutlet var textView: UITextView! // Link this to a UITextView in Storyboard
override func viewDidLoad() {
super.viewDidLoad()
textView.smartInsertDeleteType = UITextSmartInsertDeleteType.no
textView.delegate = self
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
guard let rangeOfTextToReplace = Range(range, in: textView.text) else {
return false
}
let substringToReplace = textView.text[rangeOfTextToReplace]
let count = textView.text.count - substringToReplace.count + text.count
return count <= 10
}
}
Run Code Online (Sandbox Code Playgroud)
通过false
在...shouldChangeTextInRange...
委托方法中返回,您实际上是在限制整个文本并且处理以下情况可能非常困难:
这样你就可以:
通过删除多余的字符:
textView.text = String(textView.text.prefix(140))
Run Code Online (Sandbox Code Playgroud)
你甚至可以在飞行中做到!通过把这段代码里面行动的textView
或textField
与该.editingChanged
事件。
是的
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
int limit = 139;
return !([textField.text length]>limit && [string length] > range.length);
}
Run Code Online (Sandbox Code Playgroud)
这只会输入140个字符,如果需要你可以删除它们
迅速:
// MARK: UITextViewDelegate
let COMMENTS_LIMIT = 255
func textView(textView: UITextView, shouldChangeTextInRange range:NSRange, replacementText text:String ) -> Bool {
return count(comments.text) + (count(text) - range.length) <= COMMENTS_LIMIT;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
66953 次 |
最近记录: |