2013-11-01 62 views
0

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

目前Add按钮的代码是:

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

您必须使用一个TableView中显示记录正确吗?只需重新加载数据。 –

+0

你可以发布你的代码来设置屏幕上显示的内容吗?如果你不使用'UITableView',你应该只在一个函数中使用这个代码,并在需要时调用它。 – jonathanpeppers

+0

添加了写出按钮的代码。如果这不够详细,请告诉我。我不想在那里放太多。理想情况下,只要用户离开视图,就需要一种处理视图的方式,以便当他们再次导航到视图时,它会从头开始重新创建视图。谢谢。 – Higgsinator

回答

0

试着改变你的新创建UIButton S的TitleColorBorderColorBorderWidth。也许你的按钮显示在视图上,但你无法看到它们。

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

并刷新你的观点:

private void ReloadSubviews() 
{ 
    ClearView(); 
    PopulateSubviews(); 
    InitializeSubviews(); 
} 
+0

感谢您的回复。它们在屏幕上显示得很好,但如果我更改数据,离开页面,然后返回到页面,它仍然显示具有相同按钮的同一屏幕,我无法确定如何更新显示的内容进入屏幕。 – Higgsinator