public NewCommentViewController(Func <string, Task> saveAction) { ViewModel = new NewCommentViewModel(saveAction); Title = "New Comment"; EdgesForExtendedLayout = UIRectEdge.None; var discardButton = new UIBarButtonItem { Image = Images.Buttons.Cancel }; var doneButton = new UIBarButtonItem(UIBarButtonSystemItem.Save); NavigationItem.RightBarButtonItem = doneButton; NavigationItem.LeftBarButtonItem = discardButton; _textView = new UITextView(); _textView.Font = UIFont.PreferredBody; _textView.AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth; // Work around an Apple bug in the UITextView that crashes if (ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.SIMULATOR) { _textView.AutocorrectionType = UITextAutocorrectionType.No; } OnActivation(d => { discardButton .GetClickedObservable() .SelectUnit() .BindCommand(ViewModel.DiscardCommand) .AddTo(d); this.WhenAnyValue(x => x.ViewModel.DoneCommand.CanExecute) .Switch() .Subscribe(x => doneButton.Enabled = x) .AddTo(d); doneButton .GetClickedObservable() .Do(_ => _textView.ResignFirstResponder()) .SelectUnit() .BindCommand(ViewModel.DoneCommand) .AddTo(d); _textView .GetChangedObservable() .Subscribe(x => ViewModel.Text = x) .AddTo(d); this.WhenAnyValue(x => x.ViewModel.Text) .Subscribe(x => _textView.Text = x) .AddTo(d); this.WhenAnyObservable(x => x.ViewModel.DismissCommand) .Select(_ => Unit.Default) .Subscribe(_dismissSubject) .AddTo(d); }); }
public ComposerViewController(Func <string, Task> doneAction) { Title = "New Comment"; EdgesForExtendedLayout = UIRectEdge.None; var close = new UIBarButtonItem { Image = Images.Buttons.Cancel }; NavigationItem.LeftBarButtonItem = close; _doneButton = new UIBarButtonItem(UIBarButtonSystemItem.Save); NavigationItem.RightBarButtonItem = _doneButton; TextView = new UITextView(ComputeComposerSize(CGRect.Empty)); TextView.Font = UIFont.PreferredBody; TextView.AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth; // Work around an Apple bug in the UITextView that crashes if (ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.SIMULATOR) { TextView.AutocorrectionType = UITextAutocorrectionType.No; } View.AddSubview(TextView); OnActivation(d => { close .GetClickedObservable() .Select(_ => Unit.Default) .Subscribe(_dismissObservable) .AddTo(d); _doneButton .GetClickedObservable() .Subscribe(async _ => { TextView.ResignFirstResponder(); _doneButton.Enabled = false; try { await doneAction(TextView.Text); _dismissObservable.OnNext(Unit.Default); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message + " - " + e.StackTrace); } finally { _doneButton.Enabled = true; } }) .AddTo(d); TextView .GetChangedObservable() .Subscribe(x => this.RaisePropertyChanged(nameof(Text))) .AddTo(d); this.WhenAnyValue(x => x.Text) .Select(x => x.Length > 0) .Subscribe(x => _doneButton.Enabled = x) .AddTo(d); }); }