public SubscribeTableSource(UIView view)
        {
            _tableCells = new Dictionary <string, UITableViewCell>();
            _bindings   = new List <Binding>();

            _tapGestureRecognizer = new UIGestureRecognizer();
            _tapGestureRecognizer.AddTarget(() => view.EndEditing(true));
        }
        protected override void OnElementChanged(ElementChangedEventArgs <Xamarin.Forms.Button> e)
        {
            base.OnElementChanged(e);
            Control.UserInteractionEnabled = true;
            UIGestureRecognizer touch = new UIGestureRecognizer();

            touch.AddTarget(() => HandleTouch(touch));
            Control.AddGestureRecognizer(touch);
        }
        public void NoStrongCycles()
        {
            bool finalizedAnyCtor       = false;
            bool finalizedAnyAddTarget1 = false;
            bool finalizedAnyAddTarget2 = false;

            // Add the gesture recognizers to a list so that they're not collected until after the test
            // This is to avoid false positives (the callback should be collectible already after disposing the gesture recognizer).
            var list = new List <UIGestureRecognizer> ();

            var pool = new NSAutoreleasePool();

            for (var k = 0; k < 10; k++)
            {
                {
                    var notifier = new FinalizerNotifier(() => finalizedAnyCtor = true);
                    using (var gr = new UIGestureRecognizer(() => {
                        GC.KeepAlive(notifier);                          // Make sure the 'notifier' instance is only collected if the delegate to UIGestureRecognizer is collectable.
                    })) {
                        list.Add(gr);
                    }
                }
                {
                    var notifier = new FinalizerNotifier(() => finalizedAnyAddTarget1 = true);
                    using (var gr = new UIGestureRecognizer()) {
                        gr.AddTarget(() => { GC.KeepAlive(notifier); });
                        list.Add(gr);
                    }
                }
                {
                    var notifier = new FinalizerNotifier(() => finalizedAnyAddTarget2 = true);
                    using (var gr = new UIGestureRecognizer()) {
                        gr.AddTarget((obj) => { GC.KeepAlive(notifier); });
                        list.Add(gr);
                    }
                }
            }
            pool.Dispose();

            TestRuntime.RunAsync(DateTime.Now.AddSeconds(1), () => { GC.Collect(); }, () => finalizedAnyCtor && finalizedAnyAddTarget1 && finalizedAnyAddTarget2);
            Assert.IsTrue(finalizedAnyCtor, "Any finalized");
            Assert.IsTrue(finalizedAnyAddTarget1, "AddTarget1 finalized");
            Assert.IsTrue(finalizedAnyAddTarget2, "AddTarget2 finalized");

            GC.KeepAlive(list);
        }
Esempio n. 4
0
 public PieRadarChartGesture()
 {
     tapGesture   = new UITapGestureRecognizer();
     touchGesture = new TouchGesture(this);
     tapToken     = tapGesture.AddTarget(HandleTap);
 }