1

UITableView をスクロールするときに、セルのテキスト フィールドの値に問題があります。下にスクロールしてカスタム セルを非表示にすると、textField の値が削除されます。dequeueReusableCellWithIdentifier メソッドが機能しません。私はこれを持っています:

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

 static NSString *SectionsTableIdentifier = @"MyCustomCell";

 MyCustomCell *cell = (MyCustomCell *) [tableView dequeueReusableCellWithIdentifier:SectionsTableIdentifier];

    if (cell == nil) {
        NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:self options:nil];
        cell = [objects objectAtIndex:0];
    }

 cell.labelCustomAttribute.text= @"Attribute Name";
 cell.textFieldCustomAttribute.delegate = self;

 return cell;


}
4

2 に答える 2

1

viewDidLoad メソッドでカスタム セルを tableView に登録してから、単純に dequeueReusableCellWithIdentifier を使用する方が簡単だと思います。セルを登録すると、dequeue メソッドが自動的に再利用可能なセルを取得するか、新しいカスタム セルを割り当てます (利用可能なセルがない場合)。

例:

-(void)viewDidLoad
{
    [super viewDidLoad];

    // Get a point to the customized table view cell for MyCustomCell
    UINib *myCustomCellNib = [UINib nibWithNibName:@"MyCustomCell" bundle:nil];
    // Register the MyCustomCell with tableview
    [[self tableView] registerNib:myCustomCellNib forCellReuseIdentifier:@"MyCustomCell"];
}

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

    static NSString *SectionsTableIdentifier = @"MyCustomCell";
    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:SectionsTableIdentifier];

    cell.labelCustomAttribute.text= @"Attribute Name";
    cell.textFieldCustomAttribute.delegate = self;

    return cell;

}
于 2013-03-28T21:46:45.757 に答える
0

通常、reuseIdentifier は UITableViewCell のinitWithStyle:reuseIdentifier:メソッドで割り当てられますが、Nib からビューをロードしているため、使用していません。

このプロパティは読み取り専用であるため、後で設定することはできません。

おそらく、標準initWithStyle:reuseIdentifier:を使用してセルをインスタンス化し、Nib からのビューをセルの ContentView のサブビューとして追加することができます...

あなたのケースで起こっていることは、Table View に表示する必要があるたびに新しいセルを作成することです。明らかに、これは機能しません。実際、セルを再利用する場合は、テキスト フィールドの内容もどこかに (できればデータ ソース内に) 保存し、セルを再利用するときにそれを配置する必要があります。保存しないと、セルが再利用されるときに、セルが表示された前の行のデータが含まれます。

于 2013-02-04T16:41:50.797 に答える