【问题标题】:again convert textKit from Objective-C to Swift再次将 textKit 从 Objective-C 转换为 Swift
【发布时间】:2016-03-13 22:12:25
【问题描述】:

以下代码在我的应用程序中使用 strikeThrough 更改文本视图中文本的状态。现在我用 Objective-C 和 Swift 编写了一个小的示例应用程序。正如您在屏幕截图中看到的那样,结果再次令人沮丧。非常欢迎任何帮助。

我只是使用 TextView 并尝试使用 StrikeThrough-Layout 显示一些文本(其他样式,如粗体、斜体、下划线......具有相同的结果)

第一个objc,没关系,虽然被划掉的部分的font-size很小

现在有了 Swith。字体和objc一样小,但没有删除线:-)

现在又(不知道另一种方式)测试代码:

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

- (void) setFont
{
    NSRange range = NSMakeRange(11, 24);
    [self makeStrikeThrough:range];
}

在 swift 中相同:

func setFont() {
    let range = NSMakeRange(11, 24)
    self.makeStrikeThrough(range)
}

objc 第 2 部分:罢工

- (void) makeStrikeThrough:(NSRange)selectedRange
{
    NSMutableDictionary *dict = [self getDict:selectedRange];
    [_textView.textStorage beginEditing];
    [_textView.textStorage setAttributes:dict range:selectedRange];
    [_textView.textStorage endEditing];
}

在 Swift 中:

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 部分:使用 StrikeThrough 构建字典的帮助方法 getDict()

- (NSMutableDictionary*) getDict:(NSRange)range
{
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    [dict setObject:[NSNumber numberWithInt:2] forKey:NSStrikethroughStyleAttributeName];
    return dict;
}

在 Swift 中再次出现

func getDict(range: NSRange) ->  NSMutableDictionary {
    let dict = NSMutableDictionary()
    dict[NSStrikethroughStyleAttributeName] = NSNumber(integer: NSUnderlineStyle.StyleDouble.rawValue)
    return dict
}

我已尝试将问题归结为根源。也许你投票给我;-) 但我需要一个解决方案...

或者我应该使用 AttributedStrings 吗?

要下载的项目

objc

swift

【问题讨论】:

    标签: objective-c xcode swift uitextview


    【解决方案1】:

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

    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:

    func makeStrikeThrough(selectedRange: NSRange) {
        let dict = self.getDict(selectedRange)
        self.textView.textStorage.beginEditing()
        textView.textStorage.setAttributes(dict, range: selectedRange)
        self.textView.textStorage.endEditing()
    }
    

    您还需要更改 getDict 函数:

    func getDict() -> [String: AnyObject] {
        return [NSStrikethroughStyleAttributeName: 2]
    }
    

    【讨论】:

    • 我先试过了。但这会导致编译错误“无法将'NSMutableDictionary'类型的值转换为预期的参数类型'[String:AnyObject]?'”
    • 错过了getDict函数的变化
    • 哇,现在很好 :-) 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多