0

動的テーブルを作成しましたが、最初のセルのテキストフィールドのコンテンツにアクセスしようとすると問題が発生します。アクションを呼び出す前にテキストを入力しても、取得したテキストフィールドは常に空です。

これが私のコードです。何が悪いのかを見つけるのを手伝ってくれませんか。

CustomNameCell.h

@interface CustomNameCell : UITableViewCell
    @property (retain, nonatomic) IBOutlet UITextField *nameTextField;
@end

CustomViewController.h

@interface CustomViewController : UITableViewController
    @property (retain, nonatomic) IBOutlet UITableView *tableview;
    - (IBAction)search:(id)sender;
@end

CustomViewController.m:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 1) {
        static NSString *CellIdentifier = @"nameCell";
        CustomNameCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell==nil) {
            cell = [[CustomNameCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        return cell;
    }
    ...

そして、ボタンをクリックしたときのアクション。テキストフィールドのコンテンツを取得しようとします。

- (IBAction)search:(id)sender {

static NSString *CellIdentifier = @"nameCell";
CustomNameCell *nameCell = [_tableview dequeueReusableCellWithIdentifier:CellIdentifier];

here nameCell.nameTextField.text is always equal to @""

テキストフィールドが常に空になるのはなぜですか?

ご協力ありがとうございました ;)

4

3 に答える 3

2

セルが必要な場合は、次のように取得する必要があります。

CustomNameCell * cell = (CustomNameCell *)[tableview cellForRowAtIndexPath:indexPath];
NSString * textInField = cell.nameTextField.text;

どのロジックが必要か教えていただければ、質問を拡大します。今のところ-この方法を使用できます。

最初のセルの内容は次のようになります。

CustomNameCell * cell = (CustomNameCell *)[tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
NSString * textInField = cell.nameTextField.text;
于 2012-12-06T10:06:42.357 に答える
0

tableViewの作成中にセルを再利用するメカニズムであるため、[_tableview dequeueReusableCellWithIdentifier:CellIdentifier];内で呼び出すべきではありません。(IBAction)search:(id)senderテーブルビューをスクロールするときに新しいセルを作成する代わりに、以前に作成したいくつかのセルを再利用しています。

結論:代わりにを使用cellForRowAtIndexPathして、セクションの特定の行にあるセルにアクセスします。最初のセクションの最初のセルが必要な場合は、次のようになります。

CustomNameCell * cell = (CustomNameCell *)[tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
于 2012-12-06T10:12:58.297 に答える
0

私はこのようにします。それが現在のやり方かどうかはわかりません。

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return cellContentArray.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellId=@"cell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath];
    if (cell==nil) {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
    }
    UITextField *firsttext=[cell viewWithTag:101];
    UITextField *second=[cell viewWithTag:102];
    [second setTag:(indexPath.row)+1000];
    [firsttext setTag:(indexPath.row)+100];
    return cell;
}
- (IBAction)buttonPressed:(id)sender 
{
    for (int i=0; i<cellContentArray.count; i++) {
        UITableViewCell * cell = (UITableViewCell *)[baseTableveiew cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
        UITextField *tempTextField=[cell viewWithTag:i+100];
        UITextField *secondTextField=[cell  viewWithTag:i+1000];
        NSString * textInField = tempTextField.text;
        NSLog(@"tempTExtTiedl tag %ld data %@",(long)tempTextField.tag, textInField);
        NSLog(@"second tag %ld data %@",(long)secondTextField.tag, secondTextField.text);
    }

}
于 2016-09-07T09:33:28.030 に答える