在 UIButton 点击​​上添加多个 UITextFields

Posted

技术标签:

【中文标题】在 UIButton 点击​​上添加多个 UITextFields【英文标题】:Add multiple UITextFields on UIButton click 【发布时间】:2015-10-26 09:24:33 【问题描述】:

我有一个相当混乱的问题。我有定义为公司详细信息的视图,其中包含 5 个UITextFieldsUITextFields 分别是:地址、城市、邮政编码等。现在,UIButton 用于添加更多地址,添加相同的视图但它需要填充不同的数据。我对此没有解决方案,这几乎就是我所做的:

 self.officeLocationsLabel = [[UILabel alloc]initWithFrame:CGRectMake(LEFT_MARGIN, self.viewForCompanyProfileImage.frame.origin.y+self.viewForCompanyProfileImage.frame.size.height+SPACE_MARGIN*2, SCREEN_WIDTH-LEFT_MARGIN*2, 40)];
    self.officeLocationsLabel.text = AMLocalizedString(@"officeLocations_text", nil);
    [self.officeLocationsLabel setTextColor:[UIColor blackColor]];
    [self.officeLocationsLabel setFont:[UIFont systemFontOfSize:20]];
    [self.mainScroll addSubview:self.officeLocationsLabel];

    self.streetAddressTextField = [self createTextFieldWithFrame:CGRectMake(LEFT_MARGIN, self.officeLocationsLabel.frame.origin.y+self.officeLocationsLabel.frame.size.height+SPACE_MARGIN, SCREEN_WIDTH-LEFT_MARGIN*2, 40) andPlaceholder:AMLocalizedString(@"streetAddress_text", nil)];
    [self.mainScroll addSubview:self.streetAddressTextField];
    self.streetAddressLine = [self createLineUsingOrigins:self.streetAddressTextField];
    [self.mainScroll addSubview:self.streetAddressLine];

    self.additionalAddresInfoTextField = [self createTextFieldWithFrame:CGRectMake(LEFT_MARGIN, self.streetAddressLine.frame.origin.y+self.streetAddressLine.frame.size.height+SPACE_MARGIN, SCREEN_WIDTH-LEFT_MARGIN*2, 40) andPlaceholder:AMLocalizedString(@"additionalAddress_text", nil)];
    [self.mainScroll addSubview:self.additionalAddresInfoTextField];

    self.additionalAddressLine = [self createLineUsingOrigins:self.additionalAddresInfoTextField];
    [self.mainScroll addSubview:self.additionalAddressLine];

    self.countryTextField = [self createTextFieldWithFrame:CGRectMake(LEFT_MARGIN, self.additionalAddressLine.frame.origin.y+self.additionalAddressLine.frame.size.height+SPACE_MARGIN, SCREEN_WIDTH/3, 40) andPlaceholder:AMLocalizedString(@"countryName_text", nil)];
    [self.mainScroll addSubview:self.countryTextField];

    self.countryLine = [self createLineUsingOrigins:self.countryTextField];
    [self.mainScroll addSubview:self.countryLine];


    self.zipCodeTextField = [self createTextFieldWithFrame:CGRectMake(self.countryTextField.frame.origin.x+self.countryTextField.frame.size.width+LEFT_MARGIN, self.additionalAddressLine.frame.origin.y+self.additionalAddressLine.frame.size.height+SPACE_MARGIN, SCREEN_WIDTH-SCREEN_WIDTH/3-LEFT_MARGIN*3, 40) andPlaceholder:AMLocalizedString(@"zipCode_text", nil)];
    [self.mainScroll addSubview:self.zipCodeTextField];
    self.zipCodeLine = [self createLineUsingOrigins:self.zipCodeTextField];
    [self.mainScroll addSubview:self.zipCodeLine];

    self.addOfficeLocation = [[UIButton alloc]initWithFrame:CGRectMake(LEFT_MARGIN, self.zipCodeLine.frame.origin.y+self.zipCodeLine.frame.size.height+SPACE_MARGIN, SCREEN_WIDTH/2, 40)];

    [self.addOfficeLocation setTitle:AMLocalizedString(@"addOfficeLocation_text", nil) forState:UIControlStateNormal];
    [self.addOfficeLocation setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
    self.addOfficeLocation.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    [self.mainScroll addSubview:self.addOfficeLocation];

【问题讨论】:

你的问题是什么?您想在按下按钮时添加所有 5 个文本字段吗? 是的,我想添加相同的 5 个文本字段,并输入与前五个不同的数据,并将它们保存在数组中。就像同一家公司的不同地点一样。 【参考方案1】:

你的问题可以有很多解决方案:

    如果您正在处理有限的地址集(如 2 或 3),那么您视图中的所有这些字段(具体为scrollView)并通过单击按钮显示那些(不要忘记增加scrollView 的内容大小)。不过这个不整洁。 为一组地址字段创建一个tableView 部分。每次单击按钮时,都会重新加载包含新部分的表格。

如果您需要更多信息,请告诉我。

【讨论】:

嘿,我认为第二种解决方案可以解决问题,但是如何在数组中添加多个单元格(来自文本字段的数据)? 是的,这是一个棘手的部分,但并不复杂。我会建议创建一个字典数组,在其中保存部分的数据。并在每次更新文本字段时更新相应的字典。

以上是关于在 UIButton 点击​​上添加多个 UITextFields的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中通过多个委托链接 UIButton 点击

在 Swift 中将多个 UIButton 添加到多个 UIView

UIButton 在 ScrollView 上不可点击

UiButton 点击​​在 UIView 上不起作用

如何在 UIButton 的标签子视图上设置 alpha

使用 UIControlStates 的 UIButton 多个标签