0

我对 iOS 开发非常陌生,我在这里遇到问题,在其他任何地方都找不到解决方案。

我需要在 UIViewController 类型的 profileDetailViewController.m 上动态生成字段,

我想要查看的字段存储在数组中,如下所示,

Array:(
        {
        fieldName = Full Name;
        value = Neil G.;
    },
        {
        fieldName = Aboutn me;
        value = "a web dev..";
    },
        {
        fieldName = State;
        value = Colorado;
    },
        {
        fieldName = City;
        value = Denver;
    },
        {
        fieldName = Website;
        value = "http://google.com";
    },
        {
        fieldName = College University;
        value = "DSU";
    },
        {
        fieldName = Graduation Year;
        value = 2011;
    }
)

我只是想让它像 iPhone 中的联系人一样,最初将页面加载为带有编辑按钮的显示模式,因此在编辑模式时它应该变成带有可编辑字段的表单。任何好的教程都会很棒。我会感谢你的帮助。谢谢你。

4

1 回答 1

3

首先获取字段数组的大小:

int fieldCount = [Array count];

然后创建一个 wrapperView,我们将在其上放置一个滚动视图,因为据我们所知,您将拥有比屏幕上容纳的更多的字段!

UIView *wrapperView = [[UIView alloc] initWithFrame:self.view.frame];
[self.view addSubView:wrapperView];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:wrapperView.frame];
[wrapperView addSubView:scrollView];

现在我将在这里添加一些标签,但您可以轻松地将它们制作成按钮或您拥有的东西。我会让它们的高度为 21,中间有 10 像素的空间。

所以现在我们需要设置contentSizescrollView的,

double heightNeeded = 0;
heightNeeded = fieldCount * 31;
if(heightNeeded < scrollView.frame.size.height){
    heightNeeded = scrollView.frame.size.height;
}

现在我们可以告诉滚动视图它的内容大小需要多大,然后添加所有标签。我将假设您的数组充满了名为 Details 的对象,这些对象具有 fieldName 和 Value,因为您没有真正指定。

[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width,heightNeeded)];
int currentY = 0;
for(Details *thisDetail in Array){
   UILabel *thisLabel = [[UILabel alloc]  initWithFrame:CGRectMake(0,currentY,scrollView.frame.size.width,21)];
    [thisLabel setLineBreakMode:UILineBreakModeWordWrap];
    thisLabel.numberOfLines = 0;
    UILabel.text = [NSString stringWithFormat:@"%@: %@",thisDetail.fieldName,thisDetail.Value];
    [thisLabel sizeToFit];
    [scrollView addSubView thisLabel];
    currentY = currentY + thisLabel.frame.origin.y + thisLabel.frame.size.height + 10;
 }

不确定您是否希望它们成为这样的标签,但这很容易改变。可能还有更多的事情,比如实现 UIScrollViewDelegate 然后在scrollView.delegate = self某个地方,但我不确定。希望这可以帮助!

于 2012-07-13T15:42:07.230 回答