2009-08-04 7 views
0

私はプレイヤーを表すカスタムセルを持つUITableViewを持っています。新しいプレーヤーを追加すると、新しいデータアイテムが追加され、[UITableView reloadData]が呼び出されます。セルの一部は、プレーヤー名を含むUITextViewです。どのようにキーボードを持ち上げるのですか?UITableViewのセルのキーボードを起動しますか?

セル内のUITextViewにアクセスできたのに、実際にまだ作成されていない場合は、becomeFirstResponderを使用できます。 reloadDataは実際にはまだ新しいセルの作成を実行していないためです。

誰かがこれを解決する必要があります。どのようにこの仕事をする上でのヒントは非常に高く評価されるでしょう。

私のコードスニペットは:

-(IBAction)addPlayerPressed:(id)sender { 
Player *newPlayer = [Player alloc]; 
[players addObject:newPlayer]; 
[table reloadData]; 

// Scroll to bottom showing the new player location 
NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:([players count] - 1) inSection:0]; 
[table scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 

// cell is always nil :(
PlayerTableCell *cell = (PlayerTableCell *)[table cellForRowAtIndexPath:scrollIndexPath] 
[cell.nameField setfirstResponder]; 
} 

答えて

0

uがテキストフィールドではなく、テーブルセルののUITableViewControllerを委任することはできますか?

0

PlayerTableCellクラスでは、-initWithStyle:reuseIdentifier:メソッドにコードを挿入して、最初のレスポンダになるかどうかを確認することができます。あなたはおそらくPlayerControllerクラスまたは類似のものを持っています。カスタムテーブルビューセルなどのデリゲートメソッドを作成することもできます。物事の

2

カップル:

あなたはおそらくUITextFieldのの代わりに、UITextViewを使用した方がいいでしょう。 UITextFieldはここで説明しているような単一行の項目に最適です。

あなたのソリューションについては、私がお勧めするものは次のとおりです。

Playerクラスに 'needsKeyboardDisplay'という名前のBOOLプロパティを追加し、新しいインスタンスを作成した後にyesに設定します。

-(IBAction)addPlayerPressed:(id)sender { 
Player *newPlayer = [[Player alloc] init]; 


newPlayer.needsKeyboardDisplay = YES; 


[players addObject:newPlayer]; 

[newPlayer release]; 

[table reloadData]; 

// Scroll to bottom showing the new player location 

NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:([players count] - 1) inSection:0]; 

[table scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 


} 

あなたがそうでなければ、あなたのセルを設定した後に続いて、cellForRowAtIndexPathで、これを挿入します。

Player *playerForCell = [players objectAtIndex:indexPath.row]; 

if (playerForCell.needsKeyboardDisplay) 
{ 
[nameField becomeFirstResponder]; 
playerForCell.needsKeyboardDisplay = NO; 
} 

ユーザーエクスペリエンスの観点から、言ったことすべて、編集のための(やや)標準iPhoneの経験このような項目の長いリストの詳細は別のビューで行うことです。もちろんそれはあなた次第です。

+0

完璧に動作します!助けてくれてありがとう!!! –

+0

私はそれを取り戻す、この修正は真剣にUITableViewを破るようだ。いくつかの行を追加したり削除したりすると、表示が非常に混乱します。私のデータセットとレンダリングとして報告された実際のセルは正しく表示されますが、ディスプレイ自体には重複したエントリが表示されます。キーボードが通常の機能に復帰することを示すコードをコメントアウトする。 :( –

関連する問題