0

まったく初心者の obj-c の質問です。ここ数日、自分の仕事をしようとして完全にイライラしていましたが、今の知識レベルよりも大きな問題を抱えているようです. この質問を投稿する前に、これについてさまざまな形で何度か質問しましたが、これまでのところ、その方法を理解していないため、ターンキー ソリューションを検索します。

仕事:

2 つのセクションを持つプレーンな UITableView。セル内の 4 つの textFields を切り替えるように入力アクセサリ ビューを改善する最初のセクションのみに関心があります。 http://uaimage.com/image/62f08045

カスタム セルは UITableViewCell から継承され、プロパティとして UITextField があります。したがって、私の仕事は、ファーストレスポンダーを異なるテキストフィールドに設定することです。

アイデア:

  • textFields を ViewController のデリゲートとして設定し、辞任して、入力アクセサリのビュー メソッドでファーストレスポンダーを設定する
  • textFields にタグを付けるには、この textFields で満たされた NSMutableArray を設定し、次に -inputAccessoryViewNext と -inputAccesoryViewPrev でレスポンダーを変更します
  • indexPath でセルにタグを付け、セルから textFields を取得する

しかし、私はこの進歩のどれも正しく認識できず、まだ何もうまくいかないので、非常に助けが必要です. 上記の UITableViewController.m と FDTextFieldCell.m (カスタム セル) が添付されています。

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

評判のささやかな報奨金で助けることができる人なら誰でも喜んで報いるでしょう.

4

1 に答える 1

1

あなたの2番目のアイデアは正しいアプローチだと思います。のようにインスタンス変数をテーブル ビュー コントローラーに追加し、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 に答える