我想翻译此代码
[self.tableView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionPrior context:NULL];
和这个
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"contentSize"]) {
DLog(@"change = %@", change.description)
NSValue *new = [change valueForKey:@"new"];
NSValue *old = [change valueForKey:@"old"];
if (new && old) {
if (![old isEqualToValue:new]) {
// do your stuff
}
}
}
}
到C#。 (取自Get notified when UITableView has finished asking for data?)
这是我到目前为止的方式:
this.TableView.AddObserver ("contentSize", NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Old | NSKeyValueObservingOptions.Prior, null);
和
public override void ObserveValue (NSString keyPath, NSObject ofObject, NSDictionary change, IntPtr context)
{
//base.ObserveValue (keyPath, ofObject, change, context);
if (keyPath == "contentSize") {
NSValue newValue = (NSValue)NSValue.FromObject(change["new"]);
NSValue oldValue = (NSValue)NSValue.FromObject(change["old"]);
//if (newValue && oldValue) {
if(!oldValue.IsEqualTo(newValue)){
// do something here
}
//}
}
}
我遇到的问题:
Action<NSObservedChange> observer
做什么?答案 0 :(得分:1)
void AddObservers()
{
TextView.AddObserver(this, "contentSize", NSKeyValueObservingOptions.OldNew, IntPtr.Zero);
}
public override void ObserveValue(NSString keyPath, NSObject ofObject, NSDictionary change, IntPtr context)
{
if (keyPath == "contentSize")
OnSizeChanged(new NSObservedChange(change));
else
base.ObserveValue(keyPath, ofObject, change, context);
}
void OnSizeChanged(NSObservedChange change)
{
CGSize oldValue = ((NSValue)change.OldValue).CGSizeValue;
CGSize newValue = ((NSValue)change.NewValue).CGSizeValue;
var dy = newValue.Height - oldValue.Height;
}