У меня tabbarcontroller добавил два контроллера представления.
InformationController, SelectedController.

// Класс 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;
        }
    }
}

// Класс InformationController

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

public override void ViewWillAppear (bool animated){
 base.ViewWillAppear (animated);
 this.DisplayItems();
}

Из UITabBarController добавлен еще один viewController, который является selectedController, имеющим значение name = "Iphone Ipad";

При некоторой операции в selectedController infoController lbl_Name.Text меняется на "Iphone Ipad";

// Класс SelectedController.

InformationController infoController = new InformationController();
                    infoController.lbl_MedicineName.Text = "Iphone Ipad";
                    this.controller.TabBarController.SelectedIndex = 0;

Его сдвиг на 0 выбран Index of TabBarController. Но значение lbl_Name такое же,

Как изменить текстовое значение метки с другого контроллера?

0
kiran 15 Авг 2014 в 21:47

1 ответ

Лучший ответ

Я сделал небольшой пример, который вы можете расширить для своего кода:

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 собирается отображаться, вы можете использовать WillAppear или DidAppear для обновления текста вашей метки из вашей модели (в данном случае свойство StringB в родительском контроллере)

1
sjk 16 Авг 2014 в 01:13