无法在导航的第二个屏幕中访问导航栏

时间:2016-04-14 14:54:20

标签: uiviewcontroller xamarin uinavigationcontroller xamarin.ios navigationbar

我正在使用Xamarin.iOS开发应用程序。它将有很多我无法使用Main.StoryBoard设计的屏幕,所以我必须分别设计每个ViewController。现在我有2个屏幕:ViewController.csInProgress.cs。我已将ViewController.cs封装在Main.StoryBoard中的NavigationController内。以下是代码:

ViewController.cs(ViewDidLoad)

public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            //change the navigation bar controller
            this.NavigationController.NavigationBar.BarTintColor = UIColor.FromRGB (26f / 255f, 56f / 255f, 100f / 255f);
            this.NavigationController.NavigationBar.TitleTextAttributes = new UIStringAttributes()
            {
                ForegroundColor = UIColor.White
            };
            NavigationController.NavigationBar.BarStyle = UIBarStyle.Black;

            //change the layout of collectionView Layout

            //initialize the data
            sectionCategories = new List<SectionCategory>();
            sectionCategories.Add(new SectionCategory("Lajme", "http://www.ikub.al/media/iOS/lajme.jpg"));
            ......
            sectionCategories.Add(new SectionCategory("Shtypi i dites", "http://www.ikub.al/media/HP/shtypi.jpg"));

            sectionGrid.RegisterClassForCell(typeof(SectionViewCell), SectionViewCell.CellID);
            sectionGrid.Source = new SectionViewSource (sectionCategories,this);
        }

当我点击sectionGrid的某个项目时,它会在堆栈中推送一个新的ViewController

var soonVC = new InProgress ("InProgress");
            soonVC.Title = "InProgress";
            owner.NavigationController.PushViewController(soonVC, true);

InProgress屏幕包含.cs文件,.desigener.cs文件和.xib文件,如下所示:

public partial class InProgress : UIViewController
    {

        String section;
        public InProgress (String text) : base ("InProgress", null)
        {
            section = text;
        }

        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();
            // Perform any additional setup after loading the view, typically from a nib.
        }
        public override void DidReceiveMemoryWarning ()
        {
            base.DidReceiveMemoryWarning ();
            // Release any cached data, images, etc that aren't in use.
        }
    }

[Register ("InProgress")]
    partial class InProgress
    {
        [Outlet]
        [GeneratedCode ("iOS Designer", "1.0")]
        UILabel labelComingSoon { get; set; }

        void ReleaseDesignerOutlets ()
        {
            if (labelComingSoon != null) {
                labelComingSoon.Dispose ();
                labelComingSoon = null;
            }
        }
    }

但我有两个问题:

  • 我必须访问InProgress屏幕的导航栏才能更改后退项目,导航样式,文本颜色,后退按钮文本,添加新项目等。
  • 当我在.xib文件中设计布局时,我在中心有标签,但实际上它不在屏幕的中心,因为它没有考虑导航栏的高度,所以有些布局可能隐藏在NavigationBar

我尝试了一些像

这样的代码
soonVC.NavigationItem.LeftBarButtonItem.Title = " dsf";

但它给了我一个空对象。

对这两个问题都有任何建议。

InProgress.xib

1 个答案:

答案 0 :(得分:0)

InProgress课程中,您可以设置后退按钮文字,如下所示:

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();
        // Perform any additional setup after loading the view, typically from a nib.
        UIBarButtonItem newBackButton = new UIBarButtonItem("dfs",UIBarButtonItemStyle.Plain, (sender,args) => NavigationController.PopViewController (true));
        NavigationItem.SetLeftBarButtonItem (newBackButton, false);
        // The line below will move the search bar below the nav bar
        NavigationController.NavigationBar.Translucent = false;
    }

关于下一个问题:

  

当我在Xib文件中设计布局时,我有标签   中心,但实际上它不在屏幕的中心,因为它   没有考虑导航栏的高度,所以   某些布局可能隐藏在导航栏下。

您使用的是Autolayout吗?您需要做的就是向中心垂直添加一个约束,它应该在视图中居中。你能上传你的xib吗?如果你没有使用Autolayout,你只需要调整导航控制器。

<强>更新 如果您将导航栏设置为不是半透明的,它将位于导航栏下方。您可以在InProgress类中设置此项,也可以在故事板中设置此项: enter image description here

我还在你的xib中添加了自动布局限制,使你的标签居中于xib xml

HTH。