xCode动态添加字段

时间:2012-07-13 15:35:31

标签: iphone objective-c ios xcode cocoa-touch

我是iOS开发的新手,我在这里遇到问题,无法在其他任何地方找到解决方案。

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

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

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中的联系人, 最初使用编辑按钮将页面加载为显示模式,因此在编辑模式时,它应变为具有可编辑字段的表单。任何好的教程都会很棒。我将感谢你的帮助。谢谢。

1 个答案:

答案 0 :(得分: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个像素的空间。

所以现在我们需要设置scrollView的contentSize

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

现在我们可以告诉scrollView它需要多大的内容大小,然后添加所有标签。我将假设您的数组中填充了名为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,但我不确定。希望这有帮助!