2009-07-28 10 views
2

iPhoneのフォトギャラリーのYouTubeビデオアップローダービューに似たテーブルビューを作成しようとしています。UITableViewCellのUITextField - 新しいセルを追加する

これは基本的な設定です。

UITextFieldを含むカスタムUITableViewCellを作成しました。私のテーブルにセルを表示することはすばらしく、問題なくテキストを編集できます。イベントフックを作成して、テキストフィールドでテキストが変更されたときに表示することができます。

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged] 

私がしたいことはこれです。ユーザーが最初に私は、現在のセルの下のテーブルビューに新しいセルを挿入するテキストを編集するとき(newIndexPathは、適切な位置に先立って計算されます):私は、セルの挿入コード実行時に

[self.tableView beginUpdates]; 
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationBottom]; 
[self.tableView endUpdates]; 

問題がありますセルが作成されますが、テキストフィールドのテキストは短時間更新されますが、キーボードは閉じられ、テキストフィールドは空の文字列に戻されます。

何か助けが素晴らしいだろう!私は一日中このことについて頭を叩いています。私はここにあると考えることができ

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section 
{ 
    if (section == 0) 
     return 2; 
    else 
     return self.tags.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ... 
    cell = (SimpleTextFieldTableCell *)[tableView dequeueReusableCellWithIdentifier:tagCellIdentifier]; 

    if (cell == nil) 
    { 
     cell = [[[NSBundle mainBundle] loadNibNamed:@"SimpleTextFieldTableCell" owner:nil options:nil] lastObject]; 
    } 

    ((SimpleTextFieldTableCell *)cell).textField.delegate = self; 
    ((SimpleTextFieldTableCell *)cell).textField.tag = indexPath.row; 
    ((SimpleTextFieldTableCell *)cell).textField.text = [self.tags objectAtIndex:indexPath.row]; 
    [((SimpleTextFieldTableCell *)cell).textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 

    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
} 

- (void)textFieldDidChange:(id)sender 
{ 
    UITextField *textField = sender; 

    [self.tags replaceObjectAtIndex:textField.tag withObject:textField.text]; 
    if (textField.text.length == 1) 
    { 
     [textField setNeedsDisplay]; 
     [self addTagsCell]; 
    } 
} 

- (void)addTagsCell 
{ 
    NSString *newTag = @""; 
    [self.tags addObject:newTag]; 

    NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:self.tags.count - 1 inSection:1]; 
    [self.tableView beginUpdates]; 
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationBottom]; 
    [self.tableView endUpdates]; 
} 
+0

挿入物をコメントアウトすると、テキストフィールドは空白になりますか? – TahoeWolverine

+0

いいえ、挿入されていないテキストフィールドは、入力されたテキストを維持します。それは、テキストが消えるセルが挿入されているときだけです。 –

+0

上記のtagCellIdentifierは、Interface Builderのセルのために設定した識別子である "SimpleTextFieldTableCell"に設定されています。 –

答えて

0

だけの事はあなたが行を挿入するときに、セルキューに適切にセルを追加しなかった場合は、おそらく全体のテーブルビューは、再ロードされ、彼らがいる状態で戻ってきて文句を言わないということです彼らは、したがって、挿入の結果として空の細胞を見ている、ちょうど推測、それが助けて欲しいです。

+0

インタフェースビルダーで作成したセルを使用していますので、initWithStyle:reuseIdentifierを実行しません。それが問題なのでしょうか? –

+0

私はちょうどダブルチェックと私がセルをデキューするために使用している識別子は、私がIBのセルに割り当てたのと同じものです。 –

+0

すべてのセルに同じ識別子を使用していますか?これは問題を引き起こします – Daniel

0

クイックアップデート:

は問題ではないはずですが、私はあなたが必要としない気づく:

[self.tableView beginUpdates] 
[self.tableView endUpdates] 

を使用すると、1つの操作を実行しているので。それが問題なのかどうかはわかりません(そうすべきではありません)。


アップデート:私は、このような問題はかなり共通していると述べている必要があります

。ここにあなたの問題も

http://www.bdunagan.com/2008/12/08/uitextview-in-a-uitableview-on-the-iphone/

に関連する記事があり、他の人はこれを抽象化しています。

http://furbo.org/2009/04/30/matt-gallagher-deserves-a-medal/

は、あなたが使用することができます: http://github.com/joehewitt/three20/

をしかし、それは学習曲線のビットを持って具体的に私はそのような問題でこれを試してみました。

この問題に取り組む別のStackOverflowの質問:

Editing a UITextField inside a UITableViewCell fails

は直接あなたの問題に答えていないすみませんが、私は解決策は、これらのリンクの1つに含まれるかもしれないと思います。


オリジナル回答:

試してみてください。

[newTextField setNeedsDisplay]; 

時々tableviewsはUITextView/UITextFieldの内容を更新すると、 "スティッキー" することができます。

これでうまくいかない場合は、バックアップモデルが正しく更新されていることを確認してください。モデルを更新したことを示すコードは表示されていません(私はそうしたと思いますが、それ以外の場合は例外がスローされます)。

+0

私はsetNeedsDisplayを無駄に呼び出そうとしました。モデルの更新を含め、オリジナルの投稿にメソッドの実装を追加しました。 –

+0

ああ、私はあなたがbeginUpdatesとendUpdatesの呼び出しについて正しいと思います。私はアニメーションが挿入行メソッドがそこで呼び出された場合にのみ発生したと思ったが、それはちょうど挿入と削除のグループのように見えます。 UITableViewCellのUITextFieldはそれ自身で正常に動作するので、それは奇妙です。全く問題はありません。問題の原因となっているUITextField変更イベント内にセルを挿入するだけです。 面白いあなたはThree20を挙げるべきです。私は実際にこのアプリの大半を使っています。テーブルを手作業で作成するほうが理にかなっている場所がいくつかありました。 –

関連する問題