首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不调用textViewDidChangeSelection的情况下设置NSAttributedString属性?

在不调用textViewDidChangeSelection的情况下设置NSAttributedString属性,可以通过以下步骤实现:

  1. 获取textView的当前光标位置和选中范围。
  2. 创建一个NSMutableAttributedString对象,并设置需要的属性。
  3. 使用textView的selectedRange属性将选中范围设置为NSMakeRange(0, 0),即取消选中状态。
  4. 使用textView的textStorage属性获取textView的文本存储对象。
  5. 使用textStorage的replaceCharactersInRange:withAttributedString:方法,将textView的文本替换为设置好属性的NSMutableAttributedString对象。
  6. 使用textView的setSelectedRange:方法将光标位置设置回原来的位置。

这样就可以在不调用textViewDidChangeSelection的情况下设置NSAttributedString属性。

下面是一个示例代码:

代码语言:txt
复制
// 获取textView的当前光标位置和选中范围
let selectedRange = textView.selectedRange

// 创建NSMutableAttributedString对象,并设置需要的属性
let attributedString = NSMutableAttributedString(string: textView.text)
attributedString.addAttribute(.foregroundColor, value: UIColor.red, range: NSMakeRange(0, attributedString.length))

// 取消选中状态
textView.selectedRange = NSMakeRange(0, 0)

// 替换textView的文本为设置好属性的NSMutableAttributedString对象
textView.textStorage.replaceCharacters(in: NSMakeRange(0, textView.text.count), with: attributedString)

// 将光标位置设置回原来的位置
textView.selectedRange = selectedRange

这样就可以在不调用textViewDidChangeSelection的情况下设置NSAttributedString属性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

何在保留原本所有样式绑定和用户设置情况下设置和还原 WPF 依赖项属性

WPF 备份某控件一些属性,做一些神奇操作,然后再还原这些属性。多么司空见惯操作呀!然而怎么备份却是值得研究问题。直接赋值?那一定是因为你没踩到一些坑。...场景和问题 现在,我们假想一个场景(为了编代码方便): 有一个窗口,设置了一些样式属性 现在需要将这个窗口设置为全屏,这要求修改一些原来属性(WPF 自带那设置有 bug,我会另写一篇博客说明) 取消设置窗口全屏后...而我们通过在 XAML 或 C# 代码中直接赋值,设置是“本地值”。因此,如果设置了本地值,那么更低优先级样式当然就全部失效了。 那么绑定呢?绑定在依赖项属性优先级中并不存在。...但是,SetCurrentValue 就是干这件事! SetCurrentValue 设计为在不改变依赖项属性任何已有值情况下设置属性当前值。...,就还原了此依赖项属性一切设置值: 1 _window.InvalidateProperty(Window.WindowStyleProperty); 注意不是 ClearValue,那会清除本地值

18420
  • EasyCVR如何在不影响分享链接调用情况下设置链接一段时间后失效?

    一般此类项目通道数量大,需要更加便捷操作便于导入如此多通道,因此在去年年底,我们针对这种分享机制开发了新功能,即提供了一键导出分享链接功能。...最近有用户对于EasyCVR分享链接功能有疑问,咨询我们已经分享出去链接视频,在不影响其它调用者(接口调用方式)使用情况下,如何使分享链接失效或者一段时间后无法播放?...其实在系统设计时就考虑过分享链接安全性问题,因为毕竟视频是比较私密资料,一般分享者目的只是短暂性想把当下希望展示内容分享出去,但是希望自己监控画面一直被别人监视着,因此我们在EasyCVR...中设立了一个机制,系统使用者可以通过两种方式来控制此分享链接有效性: 1、通过页面提供按钮,重新生成新token,使之前分享token自动失效,及时播放者不停流,也无法继续获取直播流继续进行播放..." }, "Body": { "Token": "52eBiAmB" } } } 此外有用户向我们提出了一个建议:可以设置分享链接时效性

    57020

    AttributedString——不仅仅让文字更漂亮

    AttributedString中基本不采用NSAttributedString如下属性访问方式,极大减少出错几率 // 可能出现类型匹配let attributes: [NSAttributedString.Key...比如: •用NSAttributedString解析HTML,然后转换成AttributedString调用•用AttributedString创建类型安全字符串,在显示时转换成NSAttributedString...通过配置container,我们可以一次性地为属性字符串(或片段)设置、替换、合并大量属性。...NSAttributedString(attributedString, including: \.uiKit) •为了提高兼容性,部分功能相同属性,可以在foundation中设置。...在本地化属性字符串中,也提供了类似的功能,并且会在字符串中设置对应属性。提供了更高灵活性。

    3.9K40

    六天完成一个简单iOS App - 第二天

    建议在这里使用。 方法二:自定义button 并且重写layoutSubviews。...如果button是从storyboard或者xib加载会调用aweakfromnib方法,我们可以在aweakFromNib中对控件进行一些统一设置,在layoutSubviews中设置控件内内容位置...默认情况下矩形框和内容是重合 frame 以父控件 内容左上角为坐标原点, 计算出控件自己 矩形框位置和尺寸 bounds 以控件自己 内容左上角为坐标原点, 计算出控件自己 矩形框位置和尺寸...背景颜色 NSBackgroundColorAttributeName // 带有属性文字内容 @property(nullable, nonatomic,copy) NSAttributedString...range范围属性, 重复设置同一个范围属性, 最后一次设置才是有效(之前设置会被覆盖掉) - (void)setAttributes:(nullable NSDictionary<NSString

    2.1K50

    在iOS中如何正确实现行间距与行高

    但是 UILabel 是没有这么一个直接暴露属性,想要修改 lineSpacing,我们需要借助 NSAttributedString 来实现,示意代码: NSMutableParagraphStyle...设计师是想要蓝色区域高度为 10pt,而我们直接设置 lineSpacing 会将两行红色区域中间绿色区域高度设置为 10pt,这就是问题根源了。 那么这个红色区域高度是多少呢?...这时候我们可以通过设置 lineHeight 来使得每一行文本高度一致,lineHeight 设置为 30pt 情况下,一行文本高度一定是 30pt,两行文本高度一定是 60pt。...这个属性十分有用,在实现上标下标之类需求时也经常用到它。...行高和行间距同时使用时一个问题 不得不说行高和行间距我们都已经可以完美的实现了,但是我在尝试同时使用它们时,发现了 iOS 一个 bug(当然也可能是一个 feature,毕竟 crash 都不一定是

    4.1K30

    iOS 之-富文本 (NSAttributedString)

    好,开讲了: 在讲之前,我们得先明白他属性和一些方法 1.属性: NSFontAttributeName 设置字体属性,默认值:字体:Helvetica(Neue...设置字体所在区域背景颜色,取值为 UIColor对象,默认值为nil, 透明色 NSLigatureAttributeName 设置连体属性,取值为NSNumber...设置文字排版方向,取值为 NSNumber 对象(整数),0 表示横排文本,1 表示竖排文本 NSLinkAttributeName 设置链接属性,点击后调用浏览器打开指定...endEditing; @end 其中常用: 为某一范围内文字设置多个属性 - (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range...- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range; 移除某范围内某个属性 - (void)removeAttribute

    3K60

    iOS表情键盘完整实现

    方法并返回YES,这样就可以在点击表情时候调用[[UIDevice currentDevice] playInputClick]方法发出按键音了,详情请查看苹果官方文档。...一番查找之后才找到一个比较隐蔽属性:textDragInteraction,直接设置为NO就能禁止掉NSTextAttachment拖拽交互。...也就是说,我们设置到输入框NSAttributedString每一个NSTextAttachment都有一个"隐藏"属性—表情文本描述,这里对NSAttributedString进行拓展就能实现...pp_setTextBackedString可以对NSAttributedString指定range设置一个PPTextBackedString类型属性,而pp_plainTextForRange能拿到...就会从4个字符变成1个字符,这里是有差值,如果处理的话就会出现上面提到微博国际版中复制黏贴输入框表情会导致光标位置不对,甚至莫名其妙多出前后空格问题。

    2K30

    iOS14开发-UIViewController

    (2)将File’s Ownerview属性设置为xib文件(拽线设置即可)。...在需要传值地方调用代理属性方法完成传值。 代理对象(接收值 UIViewController) 实现被代理对象声明协议,实现协议中方法,拿到传过来值进行使用。...需要传值 UIViewController 声明一个闭包属性,闭包参数个数与类型取决于需要传值个数和类型,闭包返回值一般为 Void。 在需要传值地方调用闭包完成传值。...注意:默认情况下返回按钮和左侧按钮是不同时显示,只显示返回按钮而不显示左侧按钮。...UINavigationBar 上面内容渲染颜色:默认情况下,按钮或系统图片按钮都会渲染成蓝色,可以通过 UINavigationBar tintColor设置

    2.3K20

    iOS中UITableViewController自带刷新控件

    UITableViewController更多方面之处是在于下面的这个属性: @property (nonatomic) BOOL clearsSelectionOnViewWillAppear; 这是一个...bool值,设置为yes后每当当前controller调用ViewWillAppare时候,都会将cell选中状态取消,这十分有用,我们在通过点击cell跳转界面后,pop回来不需要在手动修改cell...; 这个UIRefreshControl类是iOS6之后引入一个简单刷新控件,我们如果设置了它,在tableView下拉时候,系统会提供给我们一个下拉刷新效果。...三、UIRefreshControl         这个类也十分简单,通过简单设置可以展现一个小巧刷新效果,但是制定性不强,其中主要属性如下: //获取刷新状态 @property (nonatomic...) UIColor *tintColor; //设置控件文字 @property (nullable, nonatomic, strong) NSAttributedString *attributedTitle

    1.1K30

    Sendable 和 @Sendable 闭包代码实例详解

    如何使用Sendable协议 隐式一致性消除了很多我们需要自己为Sendable协议添加一致性情况。然而,在有些情况下,我们知道我们类型是线程安全,但是编译器并没有为我们添加隐式一致性。...由于我们给自己和同事增加了额外责任,我鼓励使用这个属性,建议使用组合、最终类或值类型来实现我们目的。 如何使用 @Sendabele 函数可以跨并发域传递,因此也需要可发送一致性。...然而,函数不能符合协议,所以Swift引入了@Sendable属性。你可以传递函数例子是全局函数声明、闭包和访问器,getters和setters。...与此构建设置相关每一个触发警告都可能表明你代码中存在潜在数据竞赛。因此,必须考虑启用严格并发检查来验证你代码。...在上述SharedWithYou框架例子中,最好是等待库所有者添加Sendable支持。在这种情况下,这就意味着要等待苹果公司为SWHighlight实例指明Sendable一致性。

    1.3K20

    Swift 中 Sendable 和 @Sendable 闭包

    如何使用Sendable协议 隐式一致性消除了很多我们需要自己为Sendable协议添加一致性情况。然而,在有些情况下,我们知道我们类型是线程安全,但是编译器并没有为我们添加隐式一致性。...由于我们给自己和同事增加了额外责任,我鼓励使用这个属性,建议使用组合、最终类或值类型来实现我们目的。 如何使用 @Sendabele 函数可以跨并发域传递,因此也需要可发送一致性。...然而,函数不能符合协议,所以Swift引入了@Sendable属性。你可以传递函数例子是全局函数声明、闭包和访问器,getters和setters。...与此构建设置相关每一个触发警告都可能表明你代码中存在潜在数据竞赛。因此,必须考虑启用严格并发检查来验证你代码。...在上述SharedWithYou框架例子中,最好是等待库所有者添加Sendable支持。在这种情况下,这就意味着要等待苹果公司为SWHighlight实例指明Sendable一致性。

    1.4K30

    【API使用系列】Core Text专题

    注意:你不需要自己创建CTRun,Core Text将根据NSAttributedString属性来自动创建CTRun。...衬线(Serif):用来使字符更可视一条水平线。字母左上角和下部水平线。 无衬线(Sans Serif):可以让排字员不使用衬线装饰。...; //字符间隔属性 必须是CFNumberRef对象 const CFStringRef kCTLigatureAttributeName; //设置是否使用连字属性设置为0,表示不使用连字属性。...排列组合样式Cn1 const CFStringRefkCTUnderlineColorAttributeName; //字体下划线颜色属性 必须是CGColorRef对象,默认为前景色 const...如果你要用这种方式设置字体,你必须用Cocoa或者自己实现将字符串映射为符号,这样你才能调用CGContextShowGlphsAtPoint。

    83330

    图文混排

    是NSObject一个子类,可以利用对文本设置颜色字体间距等属性 attributeDict字典中存放一些属性名和属性值 NSDictionary *attributeDict = [NSDictionarydictionaryWithObjectsAndKeys...设置链接属性,点击后调用浏览器打开指定URL地址 ​ NSAttachmentAttributeName 设置文本附件,取值为NSTextAttachment...为此,每个文本视图都有一个文本容器,它精确地描述了这个可用区域。在简单情况下,这是一个垂直无限相当大矩形区域。文本被填充到这个区域,并且文本视图允许用户滚动它。...然而,在更高级情况下,这个区域可能是一个无限大矩形。例如,当渲染一本书时,每一页都有最大高度和宽度。文本容器会定义这个大小,并且不接受任何超出文本。...相同情况下,一幅图像可能占据了页面的一部分,文本应该沿着它边缘重新排版。

    1.5K30

    小说阅读器设计和实现

    二、CoreText相关问题 CTFramesetter是NSAttributedStringCF对象,可以直接强转; CTFrame是排版数据,由CTFramesetter生成; NSAttributedString...是常用富文本字符串类; CTLine是CTFrame中一行文本、CTRun是CTLine中有相同属性连续字形; ?...非常重要三个属性:ascent、descent、width static CGFloat ascentCallback(void * refCon){ SSEmptyLayoutData *data...HTML字符串可以通过系统API转成NSAttributedString,再通过其string属性,可以访问到NSString; /** * html字符串转富文本 */ - (NSAttributedString...之后,就不应该修改; 延伸出来翻页逻辑优化 UIPageVC在使用过程中(动画过程中),不可调用这个方法,否则滑动手势会取消,出现闪动效果。

    4K20
    领券