Xamarin.ios 为什么UILabel没有更新?

Xamarin.ios 为什么UILabel没有更新?,xamarin.ios,uilabel,updating,Xamarin.ios,Uilabel,Updating,我创建了一个视图,向用户显示断开连接的消息,这些消息会在当前视图上弹出。我希望根据连接状态的更改定期更新视图 我可以正确地获取视图并更改标签的文本(使用WriteLines进行验证),但实际显示上没有任何更改。我甚至尝试删除视图并读取它,然后调用SetNeedsDisplay,但似乎没有任何帮助 我有一个名为OverView的全局变量: public static UIView OverView; 我创建标签子视图,将其添加到概览中,并将概览弹出到当前视图的前面: UI

我创建了一个视图,向用户显示断开连接的消息,这些消息会在当前视图上弹出。我希望根据连接状态的更改定期更新视图

我可以正确地获取视图并更改标签的文本(使用WriteLines进行验证),但实际显示上没有任何更改。我甚至尝试删除视图并读取它,然后调用SetNeedsDisplay,但似乎没有任何帮助

我有一个名为OverView的全局变量:

public static UIView OverView;
我创建标签子视图,将其添加到概览中,并将概览弹出到当前视图的前面:

            UILabel labelTitle = new UILabel();
            labelTitle.Text = title;

            UIView labelTitleView = (UIView) labelTitle;
            labelTitleView.Tag = 5000;
            OverView.AddSubview(labelTitleView);

            curView.InsertSubviewAbove(OverView, curView);
            curView.BringSubviewToFront(OverView);
后来,我尝试从另一个函数中对其进行如下修改:

        if ((OverView != null) && (OverView.Subviews != null))
        {
            for (int i = 0; i < OverView.Subviews.Length; i++)
            {
                WriteToConsole("Type: " + OverView.Subviews[i].GetType());

                if (OverView.Subviews[i] is UILabel) 
                {
                    WriteToConsole("Found Label with Tag: " + ((UILabel)(OverView.Subviews[i])).Tag + " Text: " + ((UILabel)(OverView.Subviews[i])).Text);

                    if (((UILabel)(OverView.Subviews[i])).Tag == 5000)
                    {
                        WriteToConsole("Setting subview Title to: " + lostConnectionTitle);

                        lock (overViewLocker)
                        {
                            appReference.InvokeOnMainThread(delegate
                            {
                                UILabel tempLabel = ((UILabel)(OverView.Subviews[i]));
                                tempLabel.Text = lostConnectionTitle;
                                OverView.Subviews[i].RemoveFromSuperview();
                                OverView.AddSubview(tempLabel);
                                OverView.BringSubviewToFront(tempLabel);
                                OverView.SetNeedsLayout();
                                OverView.SetNeedsDisplay();
                                WriteToConsole("SetNeedsDisplay");
                            });
                        }
                    }
                }
            }
        }
if((OverView!=null)和&(OverView.subview!=null))
{
对于(int i=0;i
您是否尝试在标签上使用委托方法,并在事件发生时更改其值

例如,如果您的事件是单击一个按钮,您应该有如下内容:

yourLabel.Text = "Init";
buttonExample.TouchUpInside += (sender, e) => {
    yourLabel.Text = "I touched my button";
};
当你的视图加载时,你会看到“Init”和你的按钮,一旦你点击它,标签文本就会改变

Xamarin对事件和委托方法有一些解释


我希望这有帮助。

我不太清楚你说的是什么意思。你可以发布一些代码片段来展示如何使用我上面的代码吗?谢谢。我编辑了我的答案以便更完整。委托方法有很多种类型,这取决于您使用的不同对象。我明白了。我不确定这对我有什么帮助……问题是我可以更改文本(如WriteLines所示),但是更新的文本永远不会显示在屏幕上,即使我在主线程上更新它。