0

我创建了一个视图,显示当前视图上弹出的用户丢失的连接消息。我想根据连接状态的变化定期更新视图。

我可以正确获取视图并更改标签的文本(使用 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");
                            });
                        }
                    }
                }
            }
        }
4

1 回答 1

0

您是否尝试过在标签上使用委托方法,并在事件发生时更改它们的值?

例如,如果你的事件是点击一个按钮,你应该有这样的东西:

yourLabel.Text = "Init";
buttonExample.TouchUpInside += (sender, e) => {
    yourLabel.Text = "I touched my button";
};

当您的视图加载时,您会看到“Init”和您的按钮,一旦您单击它,标签文本就会发生变化。

Xamarin 在这里有一些关于事件和委托方法的解释。

我希望这有帮助。

于 2012-08-14T08:30:55.947 回答