再次将 textKit 从 Objective-C 转换为 Swift
again convert textKit from Objective-C to Swift
我的应用程序中使用了以下代码,通过 strikeThrough 更改文本视图中文本的状态。现在我在 Objective-C 和 Swift 中编写了一个小示例应用程序。正如您在屏幕截图中看到的那样,结果再次令人沮丧。非常欢迎任何帮助。
我只使用 TextView 并尝试使用删除线布局显示一些文本(其他样式如粗体、斜体、下划线...具有相同的结果)
第一个objc,还可以,虽然划线部分的font-size很小
现在和 Swith 一起。字体和objc一样小,但是没有删除线:-)
现在再次(不知道其他方式)测试代码:
objc 第 1 部分:设置范围的字体并调用 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 部分:使用删除线构建字典的帮助方法 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 吗?
要下载的产品
归结为 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]
}
我的应用程序中使用了以下代码,通过 strikeThrough 更改文本视图中文本的状态。现在我在 Objective-C 和 Swift 中编写了一个小示例应用程序。正如您在屏幕截图中看到的那样,结果再次令人沮丧。非常欢迎任何帮助。
我只使用 TextView 并尝试使用删除线布局显示一些文本(其他样式如粗体、斜体、下划线...具有相同的结果)
第一个objc,还可以,虽然划线部分的font-size很小
现在和 Swith 一起。字体和objc一样小,但是没有删除线:-)
现在再次(不知道其他方式)测试代码:
objc 第 1 部分:设置范围的字体并调用 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 部分:使用删除线构建字典的帮助方法 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 吗?
要下载的产品
归结为 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]
}