动态或以编程方式创建的文本框值在 iOS 中更改本机下拉菜单时发生

Posted

技术标签:

【中文标题】动态或以编程方式创建的文本框值在 iOS 中更改本机下拉菜单时发生【英文标题】:Dynamically or programatically created text box values occurs extraneously on changing native drop downs in iOS 【发布时间】:2016-02-09 07:48:15 【问题描述】:

我以编程方式创建了本机下拉列表(UIButton+UITableview)和文本字段。在方法 cellForRowAtIndexPath 中。

如果我更改了下拉值,则文本框值已在其他文本框上进行了额外设置。

图片 1)

图片 2)

1.第一张图片:在第一张图片中,我手动输入了文本框值 1,1,1。在此期间,首先下拉具有相同的值。

2.第二张图片:在第二张图片中如果我更改下拉值。已经生成了无关的文本框值。(比较第一张和第二张图片)。

那么,如何纠正这个错误。

我的 cellForRowAtIndexPath 代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

if (tableView == self.tblview)

//Buttons created programatically
UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn1.frame = CGRectMake(0.0f, 5.0f, 75.0f, 30.0f);
[btn1setTitle:projectDD forState:UIControlStateNormal];
[cell addSubview:btn1];
[btn1 addTarget:selfaction:@selector(proDropDwon:)
forControlEvents:UIControlEventTouchUpInside];
[btn1 setBackgroundImage:bgImage forState:UIControlStateNormal];
[btn1 setTag:indexPath.row];
//Text field or text box created programatically.
UITextField *text1 =  [[UITextField alloc] initWithFrame:CGRectMake(225.0f,5.0f,50.0f,20.0f)];
[text1 setBorderStyle:UITextBorderStyleLine];
[cell addSubview:text1];
[text1 setTag:indexPath.row];
[text1 addTarget:self action:@selector(text1Change:) forControlEvents:UIControlEventEditingChanged];
[text1 setText:text1];
int  j= 100;
for (int i=0; i<7; i++) 
UITextField *text2 =  [[UITextField alloc] init];
text2.frame = CGRectMake(j,5.0f,25.0f,20.0f);
[text2 setBorderStyle:UITextBorderStyleLine];
[cell addSubview:text2];
[text2 setTag:indexPath.row];
[text2 setAccessibilityLabel:txtIndValue];
[text2 addTarget:self action:@selector(text2Change:) forControlEvents:UIControlEventEditingChanged];
[text2 setKeyboardType:UIKeyboardTypeNumberPad];
j = j + 35;

return cell;

同样,我为其他 2 个下拉菜单创建了 btn2 和 btn3。

我的 didSelectRowAtIndexPath 代码:我认为问题是因为重新加载。所以我放了有关 tableviews 的代码。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

[self.tblview beginUpdates];
[self.tblview reloadRowsAtIndexPaths:[self.tblview   indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tblview endUpdates];
[self.tblview reloadData];
[tableView deselectRowAtIndexPath:indexPath animated:NO];

btn1 的代码被点击:

- (IBAction)proDropDown:(id)sender

UIButton *btn1 = (UIButton *) sender;
self.projIndexPath = [NSString stringWithFormat:@"%ld", btn1.tag];
if (self.tblviewProject.hidden ==YES) 
self.tblview1.hidden = NO;
[self.view addSubview:self.tblview1];

else 
self.tblview1.hidden = YES;


到目前为止,我尝试在单击的 btn1 内重新加载 tableview,评论重新加载数据。我必须在 cellForRowAtIndexPath 或 didSelectRowAtIndexPath.或按钮内的值设置中进行代码更改。请提前给我建议。谢谢。

【问题讨论】:

【参考方案1】:

您的方法存在多个问题。

    重用单元格时,您每次都以编程方式创建按钮并添加到上下文视图中。因此,您最终会在单个视图上累积大量控件。测试您的代码,您应该会看到内存在增加。 为了克服,您只能在创建新单元格时添加控件。假设您只有一种类型的单元格,这会很好。

    由于每个单元格都有固定控件,因此最好设计一个静态自定义单元格,这样可以使您的工作不那么复杂。

    按钮单击“proDropDwon”/“proDropDwon”的代码不匹配。这会导致运行时异常。

    这个说法很奇怪,这很可能是您的问题的原因。 [text1 setText:text1]; text1 作为文本字段不能分配给文本属性。

使用 3 和 4 您发布的代码似乎不是您遇到问题的实际代码。能否给出相关代码?

【讨论】:

以上是关于动态或以编程方式创建的文本框值在 iOS 中更改本机下拉菜单时发生的主要内容,如果未能解决你的问题,请参考以下文章

在jquery中更改另一个文本框时动态设置一个文本框值

如何更改xml文件中浮动操作按钮的颜色或以编程方式[重复]

以编程方式动态 textview 的文本更改布局中的其他视图,我不希望它

以编程方式设置文本框值但返回运行时错误 2115

访问 VBA - 使用 VBA 的 SQL 语句使用文本框组合框值在表单上填充列表框 OR

Datagridview_2 组合框值在 C# 中无效