0

绝对是初学者 obj-c 问题。过去几天我对完成我的任务感到非常沮丧,但似乎我现在遇到的问题比我的知识水平更大。在发布这个问题之前,我以不同的形式问了几次这个问题,但到目前为止我还不知道如何去做,所以我搜索了交钥匙解决方案。

任务:

带有两个部分的普通 UITableView。我只对改进输入附件视图以在单元格中的四个文本字段之间切换的第一部分感兴趣。 http://uaimage.com/image/62f08045

自定义单元格继承自 UITableViewCell 并在其中具有 UITextField 作为属性。所以我的任务是将第一响应者设置为不同的文本字段。

想法:

  • 将 textFields 设置为 ViewController 的委托,然后在输入附件视图方法中辞职并设置第一响应者
  • 标记文本字段,设置 NSMutableArray 填充此文本字段,然后在 -inputAccessoryViewNext 和 -inputAccesoryViewPrev 更改响应者
  • 通过 indexPath 标记单元格并从单元格中获取 textFields

但是我无法正确实现这些进步,而且对我来说还没有任何效果,所以非常需要帮助。我在上面附加了 UITableViewController.m 和 FDTextFieldCell.m(自定义单元格):

https://docs.google.com/open?id=0B5rYA7McNhFlSXBrLTFVU2hVd1U

将很高兴奖励任何可以通过适度的声誉来提供帮助的人。

4

1 回答 1

1

我认为您的第二个想法是正确的方法。将一个实例变量添加到您的表视图控制器NSMutableArray *_textFields中,并将其初始化为viewDidLoad.

然后,在您的tableView:cellForRowAtIndexPath:方法中,每次添加类似这样的内容:

    if ([indexPath row] == 0) {
        FDTextFieldCell *cell = [self textFieldCell];
        [[cell textLabel] setText:@"Ваше Имя"];
        [[cell textField] setPlaceholder:@"Обязательно"];
        [[cell textField] setText:[profile name]];

        [[cell textField] setReturnKeyType:UIReturnKeyNext];
        [[cell textField] setKeyboardType:UIKeyboardTypeDefault];

        // ADD THIS
        [[cell textField] setTag:[indexPath row]];
        if (![_textFields containsObject:[cell textField]]) {
            [_textFields addObject:[cell textField]];
            [_textFields sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"tag" ascending:YES]]];
        }

        return cell;
    }

从那里,您有一个排序的文本字段数组,因此您可以像这样实现您的辅助方法:

- (void) inputAccessoryViewDidSelectNext:(FDInputAccessoryView *)view {
    UITextField *textField = nil;
    for (textField in _textFields) {
        if ([textField isFirstResponder])
            break;
    }

    NSInteger indexOfFirstResponder = [_textFields indexOfObject:textField];
    NSInteger nextIndex = indexOfFirstResponder + 1;
    if (nextIndex == [_textFields count])
        nextIndex = 0;

    UITextField *nextField = [_textFields objectAtIndex:nextIndex];
    [nextField becomeFirstResponder];    
}

- (void) inputAccessoryViewDidSelectPrev:(FDInputAccessoryView *)view {
    UITextField *textField = nil;
    for (textField in _textFields) {
        if ([textField isFirstResponder])
            break;
    }

    NSInteger indexOfFirstResponder = [_textFields indexOfObject:textField];
    NSInteger previousIndex = indexOfFirstResponder - 1;
    if (previousIndex < 0)
        previousIndex = [_textFields count] - 1;

    UITextField *previousField = [_textFields objectAtIndex:previousIndex];
    [previousField becomeFirstResponder];
}
于 2012-11-09T01:21:18.887 回答