有没有办法访问RootView控制器上的UILabel?我可以使用以下代码获取RootViewController:
var window = UIApplication.SharedApplication.KeyWindow;
var vc = window.RootViewController;
while (vc.PresentedViewController != null)
{
vc = vc.PresentedViewController;
}
使用调试器并单步执行代码,我可以看到我有正确的视图控制器.在那个控制器上,我有一个UILabel,我想要为它设置文本,有什么方法可以这样做吗?我用C#编写代码,使用的是Visual Studio 2022.
**更新**
根据@Jason的建议,我将代码更改为:
var window = UIApplication.SharedApplication.KeyWindow;
MyViewController vc = (MyViewController)window.RootViewController.PresentedViewController;
vc.UpdateLabel();
我在UpdateLabel()
方法中设置了一个断点,但它从未被调用过.不知道这里发生了什么,即使我得到了一个全新的MyViewController
实例,我预计我仍然会达到临界点.
**更新**
为了让大家理解我想要做的事情,这里有更详细的解释和更多的代码.在我的视图控制器上,我有一个CollectionView
,当用户从微调器中 Select 选项时,CollectionView
会填充显示信息的标签.当用户 Select 或取消 Select CollectionView
中的单元格时,我需要更新另一个标签中的数据,在CollectionViewSource
中,我有以下代码来执行此操作:
public override void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath)
{
MyCell thecell = collectionView.CellForItem(indexPath) as MyCell;
if (Utils.DataCheck[indexPath.Row][1] == "1")
{
Utils.DataCheck[indexPath.Row][1] = "0";
}
else
{
Utils.DataCheck[indexPath.Row][1] = "1";
}
thecell.ToggleCheckBox();
var window = UIApplication.SharedApplication.KeyWindow;
MyViewController vc = (MyViewController )window.RootViewController.PresentedViewController;
vc.UpdateLabel();
}
Updatelabel()
在静态类实用程序中对相同的静态List<string[]>
进行操作.UpdateLabel()
方法在执行时会做到这一点.当我初始化CollectionView
时,我也调用UpdateLabel()
方法,它执行得很好.只是不能在CollectionViewSource
代码中执行.