0

状況:

私の 2 つのテキスト フィールドは、.h ファイルで宣言されています。

@interface DetailViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, UIAlertViewDelegate, UITextFieldDelegate> {
UITextField *countTotalFieldUniversal;
UITextField *flavorNameUniversal;
}

そして、私の .m ファイルでインスタンス化されます:

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   (NSIndexPath *)indexPath
 {
   // Label default cell
   static NSString *cellIdentifier = @"Cell";
   UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];
   if(cell==nil){
      cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
   }

   //Text fields used for editing
   countTotalFieldUniversal = [[UITextField alloc] initWithFrame:CGRectMake(200, 10, 85, 30)];
   countTotalFieldUniversal. delegate = self;
   flavorNameUniversal = [[UITextField alloc] initWithFrame:CGRectMake(10, 8, 280, 30)];
   flavorNameUniversal.delegate = self;

   flavorNameUniversal.text = @"Flavor";
   countTotalFieldUniversal.text = @"Count";

デバッグの試み:

このコードを使用してsetEditingで現在のテキストフィールド値を印刷しようとすると:

NSString *flavorText = ((UITextField*)[self.view viewWithTag:1]).text;
NSString *countText = ((UITextField*)[self.view viewWithTag:2]).text;
NSLog(@"newFlavorName: %@", flavorText);
NSLog(@"newCountTotal: %@", countText);

「フレーバー」と「カウント」という編集されていない元のラベルのみを取得します。

このコードを使用してsetEditingで現在のテキストフィールド値を印刷しようとすると:

NSString * newFlavorName = flavorNameUniversal.text;
NSString * newCountTotal = countTotalFieldUniversal.text;
NSLog(@"newFlavorName: %@", newFlavorName);
NSLog(@"newCountTotal: %@", newCountTotal);

両方の値が null になります!

テキスト フィールドへの変更がまったく追跡されていないようです。

4

1 に答える 1

0

ほとんどの場合、テキスト フィールドの変更はまったく追跡されていません。少なくとも、それらは追跡されており、あなたがそれらを手に入れる前に解放されています.

UITextField毎回新しいオブジェクトをインスタンス化しないでください。UITableViewCell をサブクラス化して、2 つUITextFieldの所有権と描画を処理することをお勧めします。サブクラスに 2 つのテキスト フィールド プロパティ ( @property (strong, nonatomic) UITextField *textField1/2) を指定し、セッターでそれらをインスタンス化するか、init遅延インスタンス化を使用してください。

委譲 (プロトコルtextFieldDidEndEditing:で宣言されたメソッド) を使用して、viewController からデータを取得します。UITextFieldDelegateUITextField

それは機能し、テキストフィールドに加えられた変更を追跡する必要があります。

于 2013-07-29T19:25:34.890 に答える