Skip to content

Commit c3ff38a

Browse files
committed
Merge remote-tracking branch 'origin/pr/735'
2 parents fd366c1 + e669f63 commit c3ff38a

11 files changed

+71
-5
lines changed

ReactiveUI/Cocoa/ReactiveCollectionView.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
namespace ReactiveUI
2222
{
2323
public abstract class ReactiveCollectionView : UICollectionView,
24-
IReactiveNotifyPropertyChanged<ReactiveCollectionView>, IHandleObservableErrors, IReactiveObject, ICanActivate
24+
IReactiveNotifyPropertyChanged<ReactiveCollectionView>, IHandleObservableErrors, IReactiveObject, ICanActivate, ICanForceManualActivation
2525
{
2626
protected ReactiveCollectionView(RectangleF frame, UICollectionViewLayout layout) : base(frame, layout) { setupRxObj(); }
2727
protected ReactiveCollectionView(IntPtr handle) : base(handle) { setupRxObj(); }
@@ -97,5 +97,11 @@ public override void RemoveFromSuperview()
9797
base.RemoveFromSuperview();
9898
deactivated.OnNext(Unit.Default);
9999
}
100+
101+
void ICanForceManualActivation.Activate(bool activate)
102+
{
103+
RxApp.MainThreadScheduler.Schedule(() =>
104+
(activate ? activated : deactivated).OnNext(Unit.Default));
105+
}
100106
}
101107
}

ReactiveUI/Cocoa/ReactiveCollectionViewController.cs

+2
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,14 @@ public override void ViewDidAppear(bool animated)
9292
{
9393
base.ViewDidAppear(animated);
9494
activated.OnNext(Unit.Default);
95+
this.ActivateSubviews(true);
9596
}
9697

9798
public override void ViewDidDisappear(bool animated)
9899
{
99100
base.ViewDidDisappear(animated);
100101
deactivated.OnNext(Unit.Default);
102+
this.ActivateSubviews(false);
101103
}
102104
}
103105
}

ReactiveUI/Cocoa/ReactiveControl.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
namespace ReactiveUI
1818
{
19-
public class ReactiveControl : UIControl, IReactiveNotifyPropertyChanged<ReactiveControl>, IHandleObservableErrors, IReactiveObject, ICanActivate
19+
public class ReactiveControl : UIControl, IReactiveNotifyPropertyChanged<ReactiveControl>, IHandleObservableErrors, IReactiveObject, ICanActivate, ICanForceManualActivation
2020
{
2121
protected ReactiveControl() : base()
2222
{
@@ -105,5 +105,11 @@ public override void ViewWillMoveToSuperview(NSView newsuper)
105105
#endif
106106
RxApp.MainThreadScheduler.Schedule(() => (newsuper != null ? activated : deactivated).OnNext(Unit.Default));
107107
}
108+
109+
void ICanForceManualActivation.Activate(bool activate)
110+
{
111+
RxApp.MainThreadScheduler.Schedule(() =>
112+
(activate ? activated : deactivated).OnNext(Unit.Default));
113+
}
108114
}
109115
}

ReactiveUI/Cocoa/ReactiveImageView.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
namespace ReactiveUI
3030
{
31-
public abstract class ReactiveImageView : NSImageView, IReactiveNotifyPropertyChanged<ReactiveImageView>, IHandleObservableErrors, IReactiveObject, ICanActivate
31+
public abstract class ReactiveImageView : NSImageView, IReactiveNotifyPropertyChanged<ReactiveImageView>, IHandleObservableErrors, IReactiveObject, ICanActivate, ICanForceManualActivation
3232
{
3333
public ReactiveImageView(RectangleF frame) : base(frame) { }
3434
public ReactiveImageView(IntPtr handle) : base(handle) { }
@@ -100,6 +100,12 @@ public override void ViewWillMoveToSuperview(NSView newsuper)
100100
#endif
101101
RxApp.MainThreadScheduler.Schedule(() => (newsuper != null ? activated : deactivated).OnNext(Unit.Default));
102102
}
103+
104+
void ICanForceManualActivation.Activate(bool activate)
105+
{
106+
RxApp.MainThreadScheduler.Schedule(() =>
107+
(activate ? activated : deactivated).OnNext(Unit.Default));
108+
}
103109
}
104110
}
105111

ReactiveUI/Cocoa/ReactiveNSView.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ namespace ReactiveUI
2929
/// This is an View that is both an NSView and has ReactiveObject powers
3030
/// (i.e. you can call RaiseAndSetIfChanged)
3131
/// </summary>
32-
public class ReactiveView : NSView, IReactiveNotifyPropertyChanged<ReactiveView>, IHandleObservableErrors, IReactiveObject, ICanActivate
32+
public class ReactiveView : NSView, IReactiveNotifyPropertyChanged<ReactiveView>, IHandleObservableErrors, IReactiveObject, ICanActivate, ICanForceManualActivation
3333
{
3434
protected ReactiveView() : base()
3535
{
@@ -121,5 +121,11 @@ public override void ViewWillMoveToSuperview(NSView newsuper)
121121
#endif
122122
RxApp.MainThreadScheduler.Schedule(() => (newsuper != null ? activated : deactivated).OnNext(Unit.Default));
123123
}
124+
125+
void ICanForceManualActivation.Activate(bool activate)
126+
{
127+
RxApp.MainThreadScheduler.Schedule(() =>
128+
(activate ? activated : deactivated).OnNext(Unit.Default));
129+
}
124130
}
125131
}

ReactiveUI/Cocoa/ReactiveNSViewController.cs

+23
Original file line numberDiff line numberDiff line change
@@ -114,13 +114,36 @@ public override void ViewDidAppear(bool animated)
114114
{
115115
base.ViewDidAppear(animated);
116116
activated.OnNext(Unit.Default);
117+
this.ActivateSubviews(true);
117118
}
118119

119120
public override void ViewDidDisappear(bool animated)
120121
{
121122
base.ViewDidDisappear(animated);
122123
deactivated.OnNext(Unit.Default);
124+
this.ActivateSubviews(false);
123125
}
124126
#endif
125127
}
128+
129+
static class UIViewControllerMixins
130+
{
131+
internal static void ActivateSubviews(this UIViewController This, bool activate)
132+
{
133+
This.View.ActivateSubviews(activate);
134+
}
135+
136+
static void ActivateSubviews(this UIView This, bool activate)
137+
{
138+
foreach (var view in This.Subviews) {
139+
var subview = view as ICanForceManualActivation;
140+
141+
if (subview != null) {
142+
subview.Activate(activate);
143+
}
144+
145+
view.ActivateSubviews(activate);
146+
}
147+
}
148+
}
126149
}

ReactiveUI/Cocoa/ReactivePageViewController.cs

+2
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,14 @@ public override void ViewDidAppear(bool animated)
9595
{
9696
base.ViewDidAppear(animated);
9797
activated.OnNext(Unit.Default);
98+
this.ActivateSubviews(true);
9899
}
99100

100101
public override void ViewDidDisappear(bool animated)
101102
{
102103
base.ViewDidDisappear(animated);
103104
deactivated.OnNext(Unit.Default);
105+
this.ActivateSubviews(false);
104106
}
105107
}
106108
}

ReactiveUI/Cocoa/ReactiveTabBarController.cs

+2
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,14 @@ public override void ViewDidAppear(bool animated)
9191
{
9292
base.ViewDidAppear(animated);
9393
activated.OnNext(Unit.Default);
94+
this.ActivateSubviews(true);
9495
}
9596

9697
public override void ViewDidDisappear(bool animated)
9798
{
9899
base.ViewDidDisappear(animated);
99100
deactivated.OnNext(Unit.Default);
101+
this.ActivateSubviews(false);
100102
}
101103
}
102104
}

ReactiveUI/Cocoa/ReactiveTableView.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
namespace ReactiveUI
2323
{
24-
public abstract class ReactiveTableView : UITableView, IReactiveNotifyPropertyChanged<ReactiveTableView>, IHandleObservableErrors, IReactiveObject, ICanActivate
24+
public abstract class ReactiveTableView : UITableView, IReactiveNotifyPropertyChanged<ReactiveTableView>, IHandleObservableErrors, IReactiveObject, ICanActivate, ICanForceManualActivation
2525
{
2626
public ReactiveTableView(RectangleF frame) : base(frame) { }
2727
public ReactiveTableView(IntPtr handle) : base(handle) { }
@@ -82,6 +82,12 @@ public override void WillMoveToSuperview(UIView newsuper)
8282
base.WillMoveToSuperview(newsuper);
8383
RxApp.MainThreadScheduler.Schedule(() => (newsuper != null ? activated : deactivated).OnNext(Unit.Default));
8484
}
85+
86+
void ICanForceManualActivation.Activate(bool activate)
87+
{
88+
RxApp.MainThreadScheduler.Schedule(() =>
89+
(activate ? activated : deactivated).OnNext(Unit.Default));
90+
}
8591
}
8692
}
8793

ReactiveUI/Cocoa/ReactiveTableViewController.cs

+2
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,14 @@ public override void ViewDidAppear(bool animated)
9494
{
9595
base.ViewDidAppear(animated);
9696
activated.OnNext(Unit.Default);
97+
this.ActivateSubviews(true);
9798
}
9899

99100
public override void ViewDidDisappear(bool animated)
100101
{
101102
base.ViewDidDisappear(animated);
102103
deactivated.OnNext(Unit.Default);
104+
this.ActivateSubviews(false);
103105
}
104106
}
105107
}

ReactiveUI/Interfaces.cs

+5
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,11 @@ public interface ICanActivate
452452
IObservable<Unit> Deactivated { get; }
453453
}
454454

455+
internal interface ICanForceManualActivation
456+
{
457+
void Activate(bool activate);
458+
}
459+
455460
/// <summary>
456461
/// Allows an additional string to make view resolution more specific than
457462
/// just a type.

0 commit comments

Comments
 (0)