Ich versuche Benachrichtigungen zu erhalten, wenn sich der Text in meinem UILabel ändert, so dass ich die Größe ändern kann, um den neuen Text anzupassen. Hier ist mein Code:AddObserver auf UILabel funktioniert nicht
public class MessageContainer : UILabel
{
private readonly int _width;
public MessageContainer(int width)
{
_width = width;
TextAlignment = UITextAlignment.Center;
Font = UIFont.PreferredTitle1;
TextColor = UIColor.White;
Lines = 999;
this.AddObserver("text", Foundation.NSKeyValueObservingOptions.Initial | Foundation.NSKeyValueObservingOptions.New, TextChanged);
}
private void TextChanged(Foundation.NSObservedChange change)
{
var s = change.NewValue as Foundation.NSString;
if (s != null) // s is always null here
{
var size = s.StringSize(UIFont.PreferredTitle1, new CGSize(_width - 20, 999), UILineBreakMode.CharacterWrap);
this.ResizeFrame(size.Width, size.Height);
}
}
}
Meine TextChanged
Funktion aufgerufen wird, aber change.NewValue
ist immer null. Ich benutze Xamarin.iOS, aber ich bin mir sicher, dass die Antwort in Objective-C oder Swift die gleiche ist.
Das hat funktioniert. Ich wusste nicht einmal, dass ich Eigenschaften übersteuern kann! – Darius