2017-02-06 2 views
0

私はToDoリストを作成します。完了したら取り消し、取り消し時に取り除く必要があります。クリックでのストライクアウトは機能しますが、既にストライクアウトしているときは削除できません。私のアプローチは、NSMutableAttributedStringのRemoveAttributeか、ラベル全体を再描画することでした。ラベル打撃効果を取り除くにはどうすればいいですか

[assembly:ResolutionGroupName(OvanTasks.LabelStrikeOutEffect.EffectNamespace)] 
[assembly: ExportEffect(typeof(LabelStrikeOutEffect), nameof(LabelStrikeOutEffect))] 
namespace OvanTasks.iOS 
{ 
    public class LabelStrikeOutEffect : PlatformEffect 
    { 
     public LabelStrikeOutEffect() 
     { 
     } 

     protected override void OnAttached() 
     { 
      SetStrikeOut(true); 
     } 

     protected override void OnDetached() 
     { 
      SetStrikeOut(false); 
     } 

     protected override void OnElementPropertyChanged(System.ComponentModel.PropertyChangedEventArgs args) 
     { 
      base.OnElementPropertyChanged(args); 

      if (args.PropertyName == Label.TextProperty.PropertyName || args.PropertyName == Label.FormattedTextProperty.PropertyName) 
      { 
       SetStrikeOut(true); 
      } 
     } 

    private void SetStrikeOut(bool strikeout) 
    { 
     try 
     { 
      var label = (UILabel)Control; 
      var text = (NSMutableAttributedString)label.AttributedText; 
      var range = new NSRange(0, text.Length); 


      if (strikeout) 
      { 
       text.AddAttribute(UIStringAttributeKey.StrikethroughStyle, NSNumber.FromInt32((int)NSUnderlineStyle.Single), range); 
      } 
      else 
      { 
       Device.BeginInvokeOnMainThread(() => { 
        text.RemoveAttribute(UIStringAttributeKey.StrikethroughStyle, range); 
       }); 
      } 

     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Cannot strike out Label. Error: " + ex.Message.ToString()); 
     } 
     finally { 
      Control.SetNeedsDisplay(); 
     } 
    } 

    } 
} 

答えて

0

わかりました。解決策があります。私は、ラベルのAttributedTextを新しい属性で上書きするだけです。

if (strikeout) 
{ 
    var newText = new NSMutableAttributedString(text.Value); 
    newText.AddAttribute(UIStringAttributeKey.StrikethroughStyle, NSNumber.FromInt32((int)NSUnderlineStyle.Single), range); 
    label.AttributedText = newText; 
} 
else 
{ 
    var newText = new NSMutableAttributedString(text.Value); 
    label.AttributedText = newText; 
} 
関連する問題