在xamarin iOS中刷新视图

时间:2013-11-01 16:05:12

标签: ios xamarin.ios xamarin

我是Xamaring和iOS的新手,但我正在尝试创建一个视图,当按下UIBarButtonSystemItem.Add时,它会向SQLite数据库添加一条记录,提醒用户然后刷新屏幕作为屏幕为SQLite中的表中的每个记录绘制一个按钮。

目前添加按钮代码为:

this.NavigationItem.SetRightBarButtonItem(new UIBarButtonItem(UIBarButtonSystemItem.Add, (sender,args) => { 
    conn.Query<Job>("INSERT INTO Job (Job) VALUES(0)"); 
    UIAlertView alSQL = new UIAlertView("Jobs","New job added",null,"ok",null);AllJobsScreen(), true);
    alSQL.Show ();
}), true);

目前已添加数据并显示警报,但我无论如何都不确定屏幕是否在数据库中反映此新记录并添加新按钮。

我在网上看了一下刷新屏幕并找不到任何东西,所以任何帮助都会很棒。或者,如果我的方法不对,请告诉我。

我正在屏幕上写出按钮,但理想情况下我需要能够刷新任何视图。目前,按钮是在SQLite查询的循环中写出的,如下所示:

UIButton btnTest = new UIButton (UIButtonType.System);
btnTest.Frame = new RectangleF(iTopLeftx, iTopLefty, 300, 30);
btnTest.SetTitle("J00000" + s.mJobID.ToString(),UIControlState.Normal);
btnTest.BackgroundColor = UIColor.Clear;
this.View.Add (btnTest);

1 个答案:

答案 0 :(得分:0)

尝试更改新创建的TitleColor的{​​{1}},BorderColorBorderWidth。也许您的按钮显示在视图上,但您却看不到它们。

UIButton

修改

然后问题似乎是您没有删除以前添加的UIButton btnTest = UIButton.FromType(UIButtonType.Custom); btnTest.Frame = new RectangleF(iTopLeftx, iTopLefty, 300, 30); btnTest.SetTitle("J00000" + s.mJobID.ToString(), UIControlState.Normal); btnTest.SetTitleColor(UIColor.Black, UIControlState.Normal); btnTest.Layer.BorderColor = UIColor.Black.CGColor; btnTest.Layer.BorderWidth = 1; btnTest.BackgroundColor = UIColor.Clear; this.View.Add(btnTest); 。尝试将您的UIButton集合保存在列表或数组中。

UIButton;

然后填充List<UIButton> buttonList

buttonList

有这两种方法:

private void PopulateSubviews()
{
    for (int i=0; i<count; i++)
    {
        UIButton btnTest = UIButton.FromType(UIButtonType.Custom);
        // previous code withoud this.View.Add(...);
        ...
        buttonList.Add(btnTest);
    }
}

并刷新您的观点:

private void ClearView()
{
    foreach (UIButton btn in buttonList)
    {
        btn.RemoveFromSuperview();
    }

    buttonList.Clear();
}

private void InitializeSubviews()
{
    foreach (UIButton btn in buttonList)
    {
        this.View.AddSubview(btn);
    }
}