Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改在Xamarin IOS中添加UITabBarController的另一个控制器的标签文本值_C#_Ios_Iphone_Xamarin_Uitabbarcontroller - Fatal编程技术网

C# 如何更改在Xamarin IOS中添加UITabBarController的另一个控制器的标签文本值

C# 如何更改在Xamarin IOS中添加UITabBarController的另一个控制器的标签文本值,c#,ios,iphone,xamarin,uitabbarcontroller,C#,Ios,Iphone,Xamarin,Uitabbarcontroller,我已经添加了两个视图控制器。 信息控制器,选择控制器 //UITabBarController类 using System; using System.Collections.Generic; using MonoTouch.UIKit; using System.Drawing; namespace IOS { public class DetailTabController : UITabBarController { public InformationControl

我已经添加了两个视图控制器。
信息控制器,选择控制器

//UITabBarController类

using System;
using System.Collections.Generic;
using MonoTouch.UIKit;
using System.Drawing;

namespace IOS {
    public class DetailTabController : UITabBarController {

     public InformationController infoController;
     public SelectedController selectedController;
     public string name = "MacBookPro";

     public override void DidReceiveMemoryWarning (){
            base.DidReceiveMemoryWarning ();
     }

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

     public override void ViewWillAppear (bool animated){
            base.ViewWillAppear (animated);    
            infoController = new InformationTabViewController();
            infoController.name = this._name;
            infoController.TabBarItem = new UITabBarItem ("Info", UIImage.FromFile("/Images/first.png"), 0);     

            selectedController = new SelectedController ();
            selectedController.Title = "selected";
            selectedController.TabBarItem = new UITabBarItem ("Select", UIImage.FromFile("/Images/four.png"), 1);
            var tabs = new UIViewController[] {
                infoController, selectedController 
            };
            ViewControllers = tabs;
        }
    }
}
//信息控制器类

public string name = "";
    DisplayItems(){
     lbl_Name.Text = name;
    }

public override void ViewWillAppear (bool animated){
 base.ViewWillAppear (animated);
 this.DisplayItems();
}
从UITabBarController添加了另一个viewController,该viewController被选为控制器, 有价值 name=“Iphone-Ipad”

在selectedController中的某些操作中,
lbl\u Name.Text
的infoController更改为
“Iphone Ipad”

//SelectedController类

InformationController infoController = new InformationController();
                    infoController.lbl_MedicineName.Text = "Iphone Ipad";
                    this.controller.TabBarController.SelectedIndex = 0;
将其移动到0,选择TabBarController的索引。但是lbl_Name的值是相同的


如何从另一个控制器更改label的文本值?

我举了一个小例子,您可以对代码进行扩展:

MyTabBarController.cs:

public class MyTabBarController : UITabBarController
{

    public string StringB
    {
        get;
        set;
    }

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

        ViewControllers = new UIViewController[]
        {
            new ControllerA
            {
                TabBarItem = new UITabBarItem("A", null, 0),
            },
            new ControllerB
            {
                TabBarItem = new UITabBarItem("B", null, 1),
            },
        };
    }
}
ControllerA.cs:

public class ControllerA : UIViewController
{
    private int counter = 0;
    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();
        View.BackgroundColor = UIColor.White;
        var button = UIButton.FromType(UIButtonType.RoundedRect);
        button.Frame = View.Frame;
        button.SetTitle("Click me to change B's Text", UIControlState.Normal);
        button.TouchUpInside += (sender, e) => 
        {
            var parentController = ParentViewController as MyTabBarController;
            if (parentController != null)
            {
                parentController.StringB = "Here's a new string for you";
            }
        };
        View.AddSubview(button);

    }
}
ControllerB.cs:

public class ControllerB : UIViewController
{
    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();
        View.BackgroundColor = UIColor.White;
        LabelB = new UILabel(View.Frame)
        {
            Text = "B's Default Text",
            TextColor = UIColor.Black,
        };
        View.AddSubview(LabelB);
    }


    public override void ViewWillAppear (bool animated)
    {
        base.ViewWillAppear (animated);
        var parent = ParentViewController as MyTabBarController;
        if (parent != null && !string.IsNullOrEmpty(parent.StringB))
        {
            LabelB.Text = parent.StringB;
        }
    }

    public UILabel LabelB {
        get;
        set;
    }
}
在ControllerB中,LabelB使用ViewDidLoad()中的默认值初始化。当按下TabA上的按钮时,它会更新其父控制器中的公共属性。现在,当ControllerB即将显示时,您可以使用WillDisplay或DidDisplay从模型中更新标签的文本(在本例中,父控制器中的StringB属性)