2012-04-11 11 views
2

私はフォームを作るためにUITextFieldsを持つUITableViewを持っています。それは素晴らしく見える - あなたが新しいUITextFieldsをスクロールするときを除いて古いものの上に置かれている場合を除いて...私は理由を理解できない!セルが再利用されると(dequeueReusableCellWithIdentifierがnil以外を返す)、セルは既存のUITextFieldとともに返されることはわかっています。私は、タグの一意性を維持するための解決策を見出しました。以前のUITextFieldを削除する方が良いでしょう。しかし、私はそれをしたくないです。最後に、このフォームが提出されたら、テキストフィールドからすべての値を取り出したいと思います(除外してもそれはできません)。UITextFieldsオーバーラップUITableViewスクロール後

ここにコードがあります。どんな助けもありがとう!

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 

cell.accessoryType = UITableViewCellAccessoryNone; 

UITextField *playerTextField = [[UITextField alloc] initWithFrame:CGRectMake(155, 15, 130, 30)]; 
playerTextField.adjustsFontSizeToFitWidth = YES; 
playerTextField.textColor = [UIColor blackColor]; 

if (indexPath.row == 0) { 
    playerTextField.placeholder = @"Unique ID Sample"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyNext; 
} 

else if (indexPath.row == 1) { 
    playerTextField.placeholder = @"Common Name"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if (indexPath.row == 2) { 
    playerTextField.placeholder = @"Scientific Name"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 3) { 
    playerTextField.placeholder = @"03/25/1992"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 4) { 
    playerTextField.placeholder = @"Male"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 5) { 
    playerTextField.placeholder = @"03/01/2012"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 6) { 
    playerTextField.placeholder = @"Huntington, WV"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 7) { 
    playerTextField.placeholder = @"Huntington, WV"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 8) { 
    playerTextField.placeholder = @"Marshall University"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 
else if ([indexPath row] == 9) { 
    playerTextField.placeholder = @"Sub Straight"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 10) { 
    playerTextField.placeholder = @"Any Light"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 11) { 
    playerTextField.placeholder = @"Temperature"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 12) { 
    playerTextField.placeholder = @"A Lot"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 13) { 
    playerTextField.placeholder = @"All Types"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 14) { 
    playerTextField.placeholder = @"Schedule"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 15) { 
    playerTextField.placeholder = @"MM/DD/YYYY"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 16) { 
    playerTextField.placeholder = @"Ate Someone"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 17) { 
    playerTextField.placeholder = @"MM/DD/YYYY"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 18) { 
    playerTextField.placeholder = @"The Morgue"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 19) { 
    playerTextField.placeholder = @"MM/DD/YYYY"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 20) { 
    playerTextField.placeholder = @"MM/DD/YYYY"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
} 

else if ([indexPath row] == 21) { 
    playerTextField.placeholder = @"To/ From"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyDone; 
}  

playerTextField.backgroundColor = [UIColor whiteColor]; 
playerTextField.autocorrectionType = UITextAutocorrectionTypeNo; // no auto correction support 
playerTextField.autocapitalizationType = UITextAutocapitalizationTypeNone; // no auto capitalization support 
playerTextField.textAlignment = UITextAlignmentLeft; 
playerTextField.tag = 0; 

playerTextField.clearButtonMode = UITextFieldViewModeNever; // no clear 'x' button to the right 
[playerTextField setEnabled: YES]; 

    [cell addSubview:playerTextField]; 

[playerTextField release]; 

cell.textLabel.text = [self.options objectAtIndex:indexPath.row]; 


return cell;  
} 
+0

これは何度も同じプロパティを追加する理由は何ですか? –

答えて

0

あなたはUITableViewCellのサブクラスを、それはあなたがちょうどあなたがそれらを削除したくない場合は、常に新しいものを追加するのではなく、セル毎に設定するUITextFieldプロパティを持つことができます。

2

カスタムを作成する必要があります。UITableViewCellこれにより、直接アクセスできるUITextFieldivarを作成することができます。こうすることで、セルがデキューされ再利用されたときに、必要なときにセルを設定することができます。セルのサブクラスでprepareForReuse:をオーバーライドし、追加したコンポーネントのすべてのプロパティをリセットしてください。

上記のコードであなたを助けるかもしれないもう一つの事ではなく、それが細胞の種類を決定するために、整数を使用してのtypedef enumの使用である:

typedef enum{ 
    PlayerFieldId = 0, 
    PlayerFieldName, 
    PlayerFieldGender 
} PlayerFields 

その後、カスタムセルのいずれかで、あなたがすることができます上記の列挙型とswitch文によるセルのタイプを設定します。

switch(type){ 
case PlayerFieldId: 
    playerTextField.placeholder = @"Unique ID Sample"; 
    playerTextField.keyboardType = UIKeyboardTypeDefault; 
    playerTextField.returnKeyType = UIReturnKeyNext; 
    break; 
    /* other fields here */ 
} 
0

次のステートメントを使用して、セルインスタンスを作成します。

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

for (UITextView *txtView in cell.contentView.subviews) 
{ 
    if ([txtView isKindOfClass:[UITextView class]]) 
    { 
     [txtView removeFromSuperview]; 
    } 
} 

if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
} 
関連する問題