UIPickerView не интерактивный - PullRequest
       3

UIPickerView не интерактивный

0 голосов
/ 17 января 2020

У меня есть приложение, которое из основного меню "гамбургер" приложения, если выбран вариант, я хочу показать PickerView для пользователя, чтобы выбрать число из.

, потому что это должно быть доступно во всем приложение из этого меню Я построил UIPickerView в AppDelegate.cs (поскольку именно там находится код UINavigationController и из этого меню).

Все отображается правильно: выбранная пользователем кнопка меню -> отображение меню -> пользователь выбирает кнопку «Показать сборщик» -> сборщик отображает все элементы. Но как только появляется окно выбора, вы не можете прокручивать опции, а кнопка «Готово», которую я добавил, нажимает кнопку «Зарегистрироваться». Фактически, текстовые поля из ViewController за этим всплывающим окном можно щелкнуть во всплывающем окне от до .

Я не уверен, почему этот 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;
}

Я удалил часть несвязанного кода (несколько nav.PushViewController () для разных экранов и других опций меню), чтобы сделать его как можно более понятным.

1 Ответ

1 голос
/ 17 января 2020

Исходя из вашего кода, кадр vwNav равен nav.NavigationBar.Bounds, а кадр pickerView равен new CGRect(275f, (UIScreen.MainScreen.Bounds.Size.Height / 2) - (375f / 2), 275f, 375f). Если добавить pickView к vwNav, окно выбора выбора выходит за пределы vwNav.

Помните, что представления не получают сенсорные события, когда они находятся за пределами своего суперпредставления .

Это причина вашей проблемы.

Решение:

Не думаю, что вы должны встроить UIPickerView в AppDelegate.cs, вместо этого создать его в ViewController.

Вы также можете добавить кнопки к Navigationbar в ViewController:

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

И не забудьте добавить средство выбора в представление Viewcontroller.

См .: uinavigationitem и add-uibarbuttonitem-to-navigation-bar-in-xamarin- ios

Не стесняйтесь задавать мне любые вопросы:).

...