UIPickerView 不具有交互性



我有一个应用程序,从主应用程序"汉堡包"菜单中,如果选择一个选项,我想显示一个PickerView供用户从中选择数字。

因为它需要从这个菜单访问整个应用程序,所以我在应用程序代表中构建了UIPickerView.cs(因为这是UINavigationController代码和菜单所在的地方(。

一切都正确显示:用户选择菜单按钮 ->菜单显示 -> 用户选择"显示选择器"按钮 -> 选取器显示所有项目。 但是一旦选择器显示,您将无法滚动选项,我添加的"完成"按钮也无法添加注册点击。 事实上,可以通过弹出窗口单击此弹出窗口后面的视图控制器中的文本字段。

我不确定为什么这个UIPickerView是非交互式的,有人有一些想法吗?

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
// create a new window instance based on the screen size
window = new UIWindow(UIScreen.MainScreen.Bounds);
// instantiate the navigation controller
nav = new UINavigationController(new SplashController());
vwNav = new UIView(nav.NavigationBar.Bounds);
var pickerView = new UIPickerView(new CGRect(275f, (UIScreen.MainScreen.Bounds.Size.Height / 2) - (375f / 2), 275f, 375f));
pickerView.ShowSelectionIndicator = true;
var myPickerViewModel = new PickerViewModel(itemList);
pickerView.Model = myPickerViewModel;
myPickerViewModel.PickerChanged += (sender, e) => {
var temp = myPickerViewModel.SelectedItem;
};
// Set up toolbar
var toolbar = new UIToolbar();
toolbar.SizeToFit();
toolbar.Hidden = false;
UILabel titleLabel = new UILabel();
titleLabel.Text = "Select an Item";
titleLabel.Frame = new RectangleF(75, 13, 200, 20);
UIButton doneButton = new UIButton(UIButtonType.Custom);
doneButton.Frame = new RectangleF(40, 335, (float)200, 30);
doneButton.SetTitle("Done", UIControlState.Normal);
doneButton.TouchDown += (sender, e) =>
{
pickerView.Hidden = true;
};
toolbar.AddSubview(titleLabel);
toolbar.AddSubview(doneButton);
pickerView.AddSubview(toolbar);
pickerView.Hidden = true;
btnMenu = new UIButton(UIButtonType.Custom);
btnMenu.Frame = new CGRect(vwNav.Frame.Right - 45, 0, 45, nav.NavigationBar.Bounds.Height);
btnMenu.SetImage(imgMenu, UIControlState.Normal);
btnMenu.SetImage(imgMenu, UIControlState.Selected);
btnMenu.TouchUpInside += (object sender, EventArgs e) =>
{
UIAlertView alert = new UIAlertView();
alert.Title = "Settings";
alert.AddButton("Open PickerView");
alert.AddButton("Exit");
alert.Dismissed += delegate (object alertSender, UIButtonEventArgs args)
{
if (args.ButtonIndex == 0)
{
pickerView.Hidden = false;
}
else
return;
}
}
vwNav.AddSubviews(btnMenu, pickerView);
nav.NavigationBar.Layer.BorderWidth = 2f;
nav.NavigationBar.Layer.BorderColor = (UIColor.FromPatternImage(imgNavBar)).CGColor;
nav.NavigationBar.AddSubviews(vwNav);
// If you have defined a root view controller, set it here:
this.window.RootViewController = nav;
this.window.MakeKeyAndVisible();
return true;
}

我删除了一些不相关的代码(一些导航。PushViewController((用于不同的屏幕和其他菜单选项(以使其尽可能清晰。

从你的代码来看,vwNav的框架是nav.NavigationBar.Bounds的,pickerView的框架是new CGRect(275f, (UIScreen.MainScreen.Bounds.Size.Height / 2) - (375f / 2), 275f, 375f)的,如果你把pickView加到vwNav,则选取器视图超出了vwNav的范围。

请记住,视图不会收到超出其超级视图边界的触摸事件

这就是您问题的原因

溶液:

我认为您不应该在AppDelegate.cs中构建UIPickerView,而是在您的ViewController中创建它。

您还可以在ViewController中添加按钮以Navigationbar

UIBarButtonItem btn = new UIBarButtonItem();
btn.Image = UIImage.FromFile("Image");
btn.Clicked += (sender, e) => { System.Diagnostics.Debug.WriteLine("show picker"); };
NavigationItem.RightBarButtonItem = btn;

并记得将选取器添加到视图控制器的视图中。

参考: uinavigationitem 和 add-uibarbuttonitem-to-navigation-bar-in-xamarin-ios

随时问我任何问题:(。

最新更新