2017-02-22 49 views
0

я ВГ написал два фикцию, чтобы Добавить подчеркивание в строку и удалить подчеркивание:Ios Swift Переключить подчеркивание приписываемой строки

Я хочу, чтобы переключить подчеркивание с помощью кнопки. Так как я могу проверить, если NSMutableAttributedString имеет подчеркивание атрибут:

func addUlnTxtFnc(TxtPsgVal :String) -> NSMutableAttributedString 
{ 
    let TxtRngVal = NSMakeRange(0, TxtPsgVal.characters.count) 
    let TxtUnlVal = NSMutableAttributedString(string: TxtPsgVal) 
    TxtUnlVal.addAttribute(NSUnderlineStyleAttributeName, value:NSUnderlineStyle.StyleSingle.rawValue, range: TxtRngVal) 

    return TxtUnlVal 
} 

func rmvUlnTxtFnc(TxtPsgVal :NSMutableAttributedString) -> NSMutableAttributedString 
{ 
    let TxtRngVal = NSMakeRange(0, TxtPsgVal.string.Len()) 
    TxtPsgVal.removeAttribute(NSUnderlineStyleAttributeName, range: TxtRngVal) 

    return TxtPsgVal 
} 

ответ

2

Вы можете проверить с помощью вызова функции .enumerateAttribute(attrName:, inRange:, options:, usingBlock:) на NSMutableAttributedString вы получаете в качестве параметра:

func rmvUlnTxtFnc(TxtPsgVal: NSMutableAttributedString) -> NSMutableAttributedString { 
    let TxtRngVal = NSMakeRange(0, TxtPsgVal.length) 
    TxtPsgVal.enumerateAttribute(NSUnderlineStyleAttributeName, inRange: TxtRngVal, options: .LongestEffectiveRangeNotRequired) { attribute, range, pointer in 
     if attribute != nil { 
      TxtPsgVal.removeAttribute(NSUnderlineStyleAttributeName, range: range) 
     } 
    } 
    return TxtPsgVal 
} 

Кроме того, вы можете сократить ваши первая функция к одной линии:

func addUlnTxtFnc(TxtPsgVal: String) -> NSMutableAttributedString { 
    return NSMutableAttributedString(string: TxtPsgVal, attributes: [NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]) 
} 

Как в стороне, ваш код не соответствует Swift style guidelines, предложенному сообществом Swift.