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";
};

ビューが読み込まれると、[初期化]とボタンが表示され、それをクリックすると、ラベルのテキストが変更されます。

Xamarinには、イベントとデリゲートメソッドに関する説明があります

お役に立てば幸いです。

于 2012-08-14T08:30:55.947 に答える