首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >再次将textKit从Objective转换为Swift

再次将textKit从Objective转换为Swift
EN

Stack Overflow用户
提问于 2016-03-13 22:12:25
回答 1查看 106关注 0票数 1

下面的代码在我的应用程序中用strikeThrough.更改文本视图中文本的状态现在我用Objective和Swift编写了一个小示例--应用程序。同样,结果是令人沮丧的,因为你可以从截图中看到。任何帮助都是非常受欢迎的。

我只是使用一个TextView,并试图显示一些文本与划线-布局(其他风格,如博尔德,意大利,下划线.有相同的结果)

首先是objc,这是可以的,虽然划线部分的字体大小非常小。

现在和斯威在一起。字体与objc一样小,但没有删除:-)

现在(不知道其他方法)测试代码:

objc第1部分:为范围设置字体并调用makeStrikeThrough()

代码语言:javascript
复制
- (void) setFont
{
    NSRange range = NSMakeRange(11, 24);
    [self makeStrikeThrough:range];
}

同样迅速:

代码语言:javascript
复制
func setFont() {
    let range = NSMakeRange(11, 24)
    self.makeStrikeThrough(range)
}

objc第2部分: strikeThrough

代码语言:javascript
复制
- (void) makeStrikeThrough:(NSRange)selectedRange
{
    NSMutableDictionary *dict = [self getDict:selectedRange];
    [_textView.textStorage beginEditing];
    [_textView.textStorage setAttributes:dict range:selectedRange];
    [_textView.textStorage endEditing];
}

在Swift中:

代码语言:javascript
复制
func makeStrikeThrough(selectedRange: NSRange) {
    let dict = self.getDict(selectedRange)
    self.textView.textStorage.beginEditing()
    textView.textStorage.setAttributes([String() : dict], range: selectedRange)
    self.textView.textStorage.endEditing()
}

objc第3部分:帮助方法getDict()用StrikeThrough建立字典

代码语言:javascript
复制
- (NSMutableDictionary*) getDict:(NSRange)range
{
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    [dict setObject:[NSNumber numberWithInt:2] forKey:NSStrikethroughStyleAttributeName];
    return dict;
}

再来一次斯威夫特

代码语言:javascript
复制
func getDict(range: NSRange) ->  NSMutableDictionary {
    let dict = NSMutableDictionary()
    dict[NSStrikethroughStyleAttributeName] = NSNumber(integer: NSUnderlineStyle.StyleDouble.rawValue)
    return dict
}

我试图把这个问题从根本上说出来。也许你投我反对票;-)但我需要一个解决办法.

还是我应该使用AttributedStrings?

下载程序

objc

斯威夫特

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 01:42:22

它归结为Swift函数中的一行代码:

代码语言:javascript
复制
func makeStrikeThrough(selectedRange: NSRange) {
    let dict = self.getDict(selectedRange)
    self.textView.textStorage.beginEditing()
    textView.textStorage.setAttributes([String() : dict], range: selectedRange) // error
    self.textView.textStorage.endEditing()
}

应该是dict

代码语言:javascript
复制
func makeStrikeThrough(selectedRange: NSRange) {
    let dict = self.getDict(selectedRange)
    self.textView.textStorage.beginEditing()
    textView.textStorage.setAttributes(dict, range: selectedRange)
    self.textView.textStorage.endEditing()
}

您还需要更改您的getDict函数:

代码语言:javascript
复制
func getDict() -> [String: AnyObject] {
    return [NSStrikethroughStyleAttributeName: 2]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35976534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档