【发布时间】: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 吗?
要下载的项目
【问题讨论】:
标签: objective-c xcode swift uitextview