我在UItableView中有一些UITextfields。文本字段已经在我创建的UITableViewCell中进行了子类化。在键盘上按下返回键后,我会想知道如何进入相应行的下一个单元格。
因此,如果用户要从宽度开始,他们将继续沿着宽度列,或者如果他们想要在每次输入时输入高度,他们将继续沿着该列继续。
目前发生的事情是,如果我使用宽度colum,它工作正常,但如果我在点击输入后选择高度UItextField,它会跳转到下一个宽度单元格。
这是我检测返回键的代码。
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[[self.view viewWithTag:textField.tag+1] becomeFirstResponder];
return YES;
}
这就是我对单元格的表格视图。
任何帮助将不胜感激。
有关详细信息,请参阅我将自定义单元格字段添加到UItextfield的方法。
NSString *widthString = [currentFinishingDictionary objectForKey:@"w"];
if ((NSNull *) widthString != [NSNull null]) {
cell.widthTexField.text = widthString;
cell.widthTexField.delegate = self;
cell.widthTexField.tag = indexPath.row;
} else {
cell.widthTexField.text = @" ";
cell.widthTexField.delegate = self;
cell.widthTexField.tag = indexPath.row;
}
NSString *heightString = [currentFinishingDictionary objectForKey:@"h"];
if ((NSNull *) heightString != [NSNull null]) {
cell.heightTextField.text = heightString;
cell.heightTextField.delegate = self;
cell.heightTextField.tag = indexPath.row;
} else {
cell.heightTextField.text = @" ";
cell.heightTextField.delegate = self;
cell.heightTextField.tag = indexPath.row;
}
答案 0 :(得分:0)
确保已将标记设置为UITextField
你应该这样试试:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
//[[self.view viewWithTag:textField.tag+1] becomeFirstResponder];
// Get here you cell seleted Refrecne
id obj = [cell.contentView viewWithTag:textField.tag+1];
if([obj isKindOfClass:[UITextField class]]) {
UITextField *nextField = (UITextField*)obj
[nextField becomeFirstResponder];
}
return YES;
}
或者您可以使用ELCTextFieldCell
它在一个单元格中包含UITextField和UILabel。您可以根据需要进行自定义。
答案 1 :(得分:0)
你可以使用
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
UITableViewCell *cell = [self.myTableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow: textField.tag+1 inSection:0]];
UITextField *tf = (UITextField*)[cell viewByTag:textField.tag+1]
[tf becomeFirstResponder];
return YES;
}
答案 2 :(得分:0)
我认为问题可能在于将标记分配给UITextFields。
请检查标签值是否实际上是您所假设的。
答案 3 :(得分:0)
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
[yourtextfield resignFirstResponder];
// save state, etc if necessary
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MyCell * cell = (MyCell *)[tableView cellForRowAtIndexPath:indexPath];
self.selectedField = cell.tf; // cell.tf is a UITextField property defined on MyCell
[yourtextfield becomeFirstResponder];
}
答案 4 :(得分:0)
您是否尝试使用collectionView而不是tableview,集合视图设计可以与您添加的图像类似,您可以在一个单元格中添加一个文本字段,然后通过执行此操作为宽度文本字段创建第一响应者
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if ( [tableView.dataSource tableView:tableView numberOfRowsInSection:0] > tag + 2)
CustomCell *cell = [self.myTableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow: textField.tag+2 inSection:0]];
[cell.textField becomeFirstResponder];
}
如果您仍然坚持使用此设计,那么您可以这样做
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
int xPosition = (int)textField.frame.origin.x;
CustomCell *cell = [self.myTableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow: textField.tag+1 inSection:0]];
if((int)cell.textField1.x == xPosition)
{
[cell.textField1.x becomeFirstResponder];
}
else
{
[cell.textField2.x becomeFirstResponder];
}
}
代码未编译。只写了逻辑。希望它有帮助:)
答案 5 :(得分:0)
更改以下可能对您有用的分配标记值。
NSString *widthString = [currentFinishingDictionary objectForKey:@"w"];
if ((NSNull *) widthString != [NSNull null]) {
cell.widthTexField.text = widthString;
cell.widthTexField.delegate = self;
cell.widthTexField.tag = indexPath.row;
} else {
cell.widthTexField.text = @" ";
cell.widthTexField.delegate = self;
cell.widthTexField.tag = indexPath.row;
}
NSString *heightString = [currentFinishingDictionary objectForKey:@"h"];
if ((NSNull *) heightString != [NSNull null]) {
cell.heightTextField.text = heightString;
cell.heightTextField.delegate = self;
cell.heightTextField.tag = indexPath.row + 2000;
} else {
cell.heightTextField.text = @" ";
cell.heightTextField.delegate = self;
cell.heightTextField.tag = indexPath.row + 2000;
}
现在您的textfields标记如下所示,可以按照您的需要工作。
0 2000
1 2001
2 2002
3 2003
4 2004
.. ........
现在你的方法正常工作,但也需要考虑其他想法,因为当你有2000个单元格时这会出错。
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
// i.e. textField.tag == 6 then next 6 + 1 == 7
// i.e. textField.tag == 20006 then next 2006 + 1 == 2007
[[self.view viewWithTag:textField.tag+1] becomeFirstResponder];
return YES;
}