У меня 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 такое же,
Как изменить текстовое значение метки с другого контроллера?
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 в родительском контроллере)
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.