2012-02-13 5 views
0

私はtextFieldでカスタムセルを作成しましたが、その値を取得できません。
私のtableViewには、他のデフォルトセルとともにこれらのカスタムセルが3つあります。
私はこれを試してみてください。セルのtextFieldからヌル値を返します

NSString *string = customCell.textField.text; 

私は常にnull値を取得...
これは私のコードです:

TextFieldCell.m

#import "TextFieldCell.h" 

@implementation TextFieldCell 

@synthesize label; 
@synthesize textField; 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) 
    { 
     label = [[UILabel alloc] initWithFrame:CGRectZero]; 
     label.backgroundColor = [UIColor clearColor]; 
     label.textAlignment = UITextAlignmentRight; 
     label.textColor = [UIColor blackColor]; 
     label.font = [UIFont boldSystemFontOfSize:16.0]; 
     label.adjustsFontSizeToFitWidth = YES; 
     label.baselineAdjustment = UIBaselineAdjustmentNone; 
     label.numberOfLines = 20; 
     [self.contentView addSubview:label]; 

     textField = [[UITextField alloc] initWithFrame:CGRectZero]; 
     textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
     textField.backgroundColor = [UIColor clearColor]; 
     textField.font = [UIFont boldSystemFontOfSize:16.0]; 
     textField.delegate = self; 
     textField.returnKeyType = UIReturnKeyDone; 
     [self.contentView addSubview:textField]; 
    } 

    return self; 
} 

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    CGRect r = CGRectInset(self.contentView.bounds, 8, 8); 
    CGRect r1 = CGRectInset(self.contentView.bounds, 8, 8); 

    if (label.text != nil) 
    { 
     r.size = CGSizeMake(12, 27); 
     label.frame = r; 

     r1.origin.x += self.label.frame.size.width + 6; 
     r1.size.width -= self.label.frame.size.width + 6; 
     textField.frame = r1; 
    } 
    else 
    { 
     textField.frame = r; 
    } 
} 

-(BOOL)textFieldShouldReturn:(UITextField *)aTextField 
{ 
    [textField resignFirstResponder]; 
    return NO; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 
} 

@end 

表ビューのデータソース

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.section == 0) 
    { 
     if (indexPath.row == 0) 
     { 
      return [self textFieldCellForTableView:tableView atIndexPath:indexPath]; 
     } 
     else if (indexPath.row == 1) 
     { 
      return [self textFieldCellForTableView:tableView atIndexPath:indexPath]; 
     } 
     else 
     { 
      return [self defaultCellForTableView:tableView atIndexPath:indexPath]; 
     } 
    } 
    else if (indexPath.section == 1) 
    { 
     if (indexPath.row == 0) 
     { 
      return [self textFieldCellForTableView:tableView atIndexPath:indexPath]; 
     } 
     else 
     { 
      return [self defaultCellForTableView:tableView atIndexPath:indexPath]; 
     } 
    } 
    else if (indexPath.section == 2) 
    { 
     return [self defaultCellForTableView:tableView atIndexPath:indexPath]; 
    } 
    else 
    { 
     return [self chooseFotoCellForTableView:tableView atIndexPath:indexPath]; 
    } 
} 

-(TextFieldCell *)textFieldCellForTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *TextFieldCellIdentifier = @"TextFieldCellIdentifier"; 

    TextFieldCell *cell = [tableView dequeueReusableCellWithIdentifier:TextFieldCellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[[TextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TextFieldCellIdentifier] autorelease]; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } 

    if (indexPath.section == 0) 
    { 
     if (indexPath.row == 0) 
     { 
      cell.label.text = nil; 
      cell.textField.placeholder = NSLocalizedString(@"Nome", @""); 
     } 
     else 
     { 
      cell.label.text = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol]; 
      cell.textField.placeholder = NSLocalizedString(@"Costo", @""); 
     } 
    } 
    else 
    { 
     cell.label.text = nil; 
     cell.textField.placeholder = NSLocalizedString(@"URL", @""); 
    } 

    return cell; 
} 

コードトゥーレット私はnomeCell、costoCellとlinkCellを記録しようとしましたが、それらが正しく割り当てられ、初期化され、私はここにARCを使用していないされてrieve TextFieldの値

TextFieldCell *nomeCell = (TextFieldCell *)[self tableView:self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 
TextFieldCell *costoCell = (TextFieldCell *)[self tableView:self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]]; 
TextFieldCell *linkCell = (TextFieldCell *)[self tableView:self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]]; 

NSLog(@"nomeCell textField = %@", nomeCell.textField.text); 
NSLog(@"costoCell textField = %@", costoCell.textField.text); 
NSLog(@"linkCell textField = %@", linkCell.textField.text); 

...
は、誰も私を助けることができますか?
ありがとうございました!

答えて

1

私はあなたが実際にあなたが値を取得しようとしている、とあなたが値を取得している時点で、テキストフィールドにテキストを入力していることを前提としていあなたのデータを保存するテーブルビュー/セルに頼るのではなく、あなたのデータモデルを更新するには?

テーブルビューコントローラのtableView:cellForRowAtIndexPath:を呼び出して現在のセルを取得しないでください。これは、新しいセルが必要な場合にのみ、テーブルビューで呼び出す必要があります。

テーブルビューのcellForRowAtIndexPath:メソッドを直接呼び出します。この代わりに:

TextFieldCell *nomeCell = (TextFieldCell *)[self tableView:self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 

このください:

TextFieldCell *nomeCell = (TextFieldCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 
+0

はありがとうございました!あなたは私の問題を解決しました;) – matteodv

0

placeholderプロパティにテキストを割り当てていて、textField.textを記録しています。

0
textField = [[UITextField alloc] initWithFrame:CGRectZero]; 
     textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
     textField.backgroundColor = [UIColor clearColor]; 
     textField.font = [UIFont boldSystemFontOfSize:16.0]; 
     textField.delegate = self; 

     //added 
     textField.tag = 101; 

     textField.returnKeyType = UIReturnKeyDone; 
     [self.contentView addSubview:textField]; 

TextFieldの値を取得するコード:

//fetch cell for which you want to get textfield then, 
TextFieldCell *nomeCell = (TextFieldCell *)[cell.contentView viewWithTag:101]; 
関連する問題