gpt4 book ai didi

ios - 如何通过名称和标签获取 textField 的值 - objective c

转载 作者:行者123 更新时间:2023-11-29 12:44:20 26 4
gpt4 key购买 nike

我得到一个用户可以输入姓名和年龄的 View :screenshot这些字段具有以下名称和标记值 1。

@property (weak, nonatomic) IBOutlet UITextField *name;
@property (weak, nonatomic) IBOutlet UITextField *amount;

如果用户创建更多文本字段,它们也将被命名为 *name 和 *age 并链接到 ViewController。第二对字段的值将计为 2,第三对字段的值为 3,依此类推。

我想 foreach 一个与 textField 对数一样长的数组并计数 i++;获取引用名称和标签的值的语法如何?我用谷歌搜索并找到了以下解决方案,如果标签是唯一的,则该解决方案有效,但在我的情况下并非如此。如何通过元素名称扩展此选择?

UITextField *textField = (UITextField*)[self.view viewWithTag:1];
NSString *amount1 = textField.text;

最佳答案

我建议将这一切移动到 UITableView 中。有很多方法可以通过使用自定义 UITableViewCell 和调整表格的背景颜色、分隔符插入等来修改它的外观。

四处寻找您喜欢的创建自定义单元格的教程,并将您的 2 个 UITextField 作为 @property 变量。创建一个新的 UITableViewController 而不是您现有的 Controller 和 #import 您的自定义单元格类。

TableViewController.h

@interface TableViewController : UITableViewController <UITextFieldDelegate>
{
NSMutableArray *namesArray;
NSMutableArray *amountsArray;
UITextField *activeField;
}

TableViewController.m

// only relevant code displayed
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [namesArray count] + 1; // extra row for the "Add Row" row
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 100.0f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIButton *addDataButton = [UIButton buttonWithType:UIButtonTypeCustom];
[addDataButton setTitle:@"Add Data to Array"];
[addDataButton addTarget:self action:@selector(addDataToArray) forControlEvents:UIControlEventTouchUpInside];
// customize your button as needed

UITableViewHeaderFooterView *footerView = [[UITableViewHeaderFooterView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 100)];
[footerView addSubview:addDataButton];
return footerView;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == [namesArray count]) // the last row
{
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@""];
cell.textLabel.text = @"Add Row";
return cell;
}

static NSString *reuseIdentifier = @"YourReuseID"; // use whatever you set in your custom cell class
MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier];

if(!cell)
{
cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:self options:nil] objectAtIndex:0];
}

cell.nameField.text = [namesArray objectAtIndex:indexPath.row];
cell.nameField.tag = indexPath.row;
cell.nameField.delegate = self;
cell.amountField.text = [amountsArray objectAtIndex:indexPath.row];
cell.amountField.tag = indexPath.row + 1000000; // to make sure it doesn't have the same tag as your nameField
cell.amountField.delegate = self;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if(indexPath.row = [namesArray count])
{
[namesArray addObject:@""];
[amountsArray addObject:@""];
[tableView reloadData];
}
}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
activeTextField = textField;
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
if(textField.tag < 1000000)
{
[namesArray replaceObjectAtIndex:textField.tag withObject:textField.text];
}
else
{
[amountsArray replaceObjectAtIndex:textField.tag - 1000000 withObject:textField.text];
}
}

- (void)addDataToArray
{
[activeTextField resignFirstResponder];
// add your data as needed. The first row's name/amount will be available in [namesArray objectAtIndex:0] and [amountsArray objectAtIndex:0]
}

关于ios - 如何通过名称和标签获取 textField 的值 - objective c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24015774/

26 4 0