根据monotouch中选定的分段控件显示不同的数据

时间:2011-12-28 12:51:39

标签: c# iphone xamarin.ios

我正在使用MonoTouch(C#)构建iPhone应用程序。我当前的视图有一个分段控件有三个选项。根据选择的段,我想显示与段相关的数据。数据很可能需要滚动。我的问题是,我应该用什么控制来实现这个目标?我使用三个ScrollView控件吗?如果是这样,我如何根据选定的段显示/隐藏每个控件?

谢谢!

1 个答案:

答案 0 :(得分:0)

我遇到过这样的情况。简而言之,我使用了一个UITableViewUITableSource。当用户选择一个段时,相应的数据源将替换为与该特定段对应的数据源,并重新加载该表(在大多数情况下为tableView.ReloadData())。

如果例如“Segment A”包含纯文本行而“Segment B”包含text + image行,则可能会有点复杂。在这种情况下,您需要在UITableSource的GetCell方法中使用更多逻辑来确定将根据数据类型显示哪个单元格。

为了最大限度地降低复杂性,我创建了一个继承它的自定义接口和泛型类:

interface ITableRow
{

    string RowTitle { get; set; }
    string RowSubTitle { get; set; }

}


class TableRow<T> : ITableRow
{

    public TableRow(string rowTitle, string rowSubtitle, T dataObject)
    {
        // fill the properties with values here
    }

    public string RowTitle { get; set; }
    public string RowSubTitle { get; set; }
    public T DataObject { get; set; }
}

我的数据源始终为List<ITableRow>(或某些情况下为Dictionary<TSome, ITableRow>),因此UITableSource.GetCell实现“知道”每次为每个单元格分配的内容。

您还可以通过添加以下构造函数来扩展它(我有):

public TableRow(Func<string, T> rowTitleFunc, Func<string, T> rowSubtitleFunc, T dataObject) 
: this(rowTitleFunc(dataObject), rowSubtitleFunc(dataObject), dataObject) {}

这样,您可以根据每行的“dataObject”显示每行中的不同数据。

PS(非主题):你不喜欢iOS上的C#吗?