2013-08-06 4 views
0

Я хочу открыть Popover в коде после того, как произойдет определенное действие (например, нажмите на кнопку).UINavigationBar в UIPopoverController выглядит уродливым, если он создан программно

Следующий код позволил мне открыть Popover с помощью NavigationBar, но он не похож на тот, который я сделал с IB. (Подход IB заключался в внедрении UIViewController в UINavigationController и определении двух кнопок отмены и сохранения). Единственное, что я хочу, это эти две кнопки поверх Popover. Я не использую никаких навигационных функций!

 var cell = grid.VisibleCellAtCoordinate(coordinate) as SDataGridTextCell; 

     var viewController = new UIViewController(); 
     var navBar = new UINavigationBar(new RectangleF(0, 0, viewController.View.Bounds.Width, 50)) 
     { 
      AutoresizingMask = UIViewAutoresizing.FlexibleWidth, 
      BarStyle = UIBarStyle.Black, 
      Translucent = true, 
      Items = new[] 
      { 
       new UINavigationItem("test") 
       { 
        LeftBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Cancel, (s, e) => { _popoverController.Dismiss(true); }), 
        RightBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Save, (s, e) => { _popoverController.Dismiss(true); }) 
       } 
      } 
     }; 

     var textField = new UITextField(new RectangleF(0, 50, viewController.View.Bounds.Width, viewController.View.Bounds.Height)) { Placeholder = "Mein Text...", BackgroundColor = UIColor.White }; 
     textField.BecomeFirstResponder(); 


     viewController.View.Add(navBar); 
     viewController.View.Add(textField); 
     viewController.View.SubviewAdded(textField); 
     _popoverController = new UIPopoverController(viewController); 
     _popoverController.SetPopoverContentSize(new SizeF(250, 200), false); 
     _popoverController.PresentFromRect(cell.Bounds, cell, UIPopoverArrowDirection.Any, false); 

Эти кнопки выглядит это изображение (уродливый):
Ugly - From Code

И это изображение показывает, как это выглядит, когда создается в IB:
Nice - From IB

ответ

0

Если бы какая-то проблема вложения представление содержимого (UIViewController) правильно к UINavigationController, потому что я пытался добавить элементы (кнопки) навигационной панели каждый раз непосредственно NavigationItem собственности UINavigationController «s. Но это должно быть сделано с помощью контроллера контента ...

 var contentViewController = new UIViewController(); 
     var textField = new UITextField(contentViewController.View.Bounds) 
     { 
      BackgroundColor = UIColor.White, 
      AutoresizingMask = ~UIViewAutoresizing.None, 
      Placeholder = "My Text..." 
     }; 
     contentViewController.View.Add(textField); 

     var navigationController = new UINavigationController(contentViewController); 
     contentViewController.Title = "Popover"; 
     contentViewController.NavigationItem.LeftBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Cancel, (s, e) => { _popoverController.Dismiss(false); }); 
     contentViewController.NavigationItem.RightBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Save, (s, e) => { _popoverController.Dismiss(false); }); 

     _popoverController = new UIPopoverController(navigationController); 
     _popoverController.SetPopoverContentSize(new SizeF(300, 300), false); 
     _popoverController.PresentFromRect(button1.Bounds, button1, UIPopoverArrowDirection.Any, false); 
1

Это одна из предостережений используя автономную навигационную панель в popover. Насколько я знаю, встраивание контроллера вашего вида в контроллер навигации - единственный способ избежать этого.

+0

Спасибо, я добавил новое решение на основе вашего ответа! Теперь внешний вид такой же, как и в IB. – dannyyy

Смежные вопросы