2016-11-04 2 views
0

私はこのアプリを継承しました(そして、私は6人の人と1人の代理店のようにパイの中に指を入れて、大きなボールのボールにうまく収まるようにしています)特定の行を編集する機能。これらの行は、ユーザがUINavigationItemボタンに触れると編集可能になります。UITableViewCellからのオブジェクトの削除

私が行ったことは、プロパティ(bCanEdit)としてBOOLを設定し、ユーザーがボタンに触れると、セレクタでこのフラグをNOからYESに変更します。次に、テーブルのreloadDataを呼び出します。 cellForRowAtIndexPathでは、私はこのコードを持っている:

UITableViewCell *cell = nil; 

    cell.accessoryType = UITableViewCellAccessoryNone; 

    if ([indexPath section] == kStaticSection) { 
     cell = [self.tableView dequeueReusableCellWithIdentifier:staticCellId]; 

     switch ([indexPath row]) 
     { 
      case kPhoneCell: 
      { 
       cell.textLabel.text = @"Phone:"; 

        if (!self.bNeedsEdit) { 


         if (cell.contentView.subviews.count > 0) { 
          for(id thisItem in cell.contentView.subviews) { 
           if ([thisItem isKindOfClass:[UITextField class]]) { 
            [thisItem removeFromSuperview]; 
           }        } 
         } 

         cell.detailTextLabel.text = self.customer.formattedPhone; 

        } else { 

         UITextField* txtPhone = [[UITextField alloc] initWithFrame:CGRectMake(cell.detailTextLabel.frame.origin.x, cell.detailTextLabel.frame.origin.y-4.0, 400.0, 24.0)]; 
         txtPhone.text = self.customer.formattedPhone; 
         txtPhone.borderStyle = UITextBorderStyleRoundedRect; 
         txtPhone.tag = 92; 
         txtPhone.delegate = self; 
         txtPhone.keyboardType = UIKeyboardTypeNumberPad; 
         [cell.contentView addSubview:txtPhone]; 

         cell.detailTextLabel.text = @""; 

        } 


       break; 
      } 

これは私が編集するユーザーのために必要なテキストフィールドを追加するため正常に動作しますが、問題は、ユーザーがプロセスをキャンセルしたときに付属しています。私は表のセルを静的な状態に戻す必要があります。

if (cell.contentView.subviews.count > 0) { 
          for(id thisItem in cell.contentView.subviews) { 
           if ([thisItem isKindOfClass:[UITextField class]]) { 
            [thisItem removeFromSuperview]; 
           }        } 
         } 

を基になるcell.detailTextLabelは、ユーザーがスクロールテーブルまで表示されません。

コードのこの部分は、テキストフィールドを除去するための作業を行います。プログラムでテーブルをスクロールしようとしましたが、うまくいきませんでした。

すべてのアイデアをいただければ幸いです。

+0

あなたが編集モードでは、このセルを持っているし、状態を変更しないのはなぜ、あなたが 'UITextField'を隠すことができない場合は、' UITextField'を表示する必要があります。 –

答えて

0

問題はセルビューを更新することです。

私の提案は、UITableViewCellのを拡張

updateViewWithData:(id)whatever-object-or-info 

みたいに関数内のロジックを入れて、それはあなたが現在も逆の操作を加えることcellForRowAtIndexPathで使用ロジックを置くの内側(テキストフィールドの場合を取り除くことであろう

最後に、状態を変更したいときは、指定したセルの関数をインデックスパスで呼び出します。

かが問題でない場合は、単にすべての可視なものを更新し、セルインデックスを持っていない場合:

NSArray *paths = [tableView indexPathsForVisibleRows]; 
+0

あなたが拡張の意味を理解しているかどうかわかりません...カテゴリまたはサブクラスを作ることを意味しますか? – PruitIgoe

+0

はい、正確です。それは必要ではありませんが、それは私が推測するのに役立ちます。将来的には、UITableViewCellsの状態システム(選択、強調表示など)を利用したい場合には、より簡単にタイトにすることができます – jalone

+0

ええ、これはおそらく、このアプリは集合体である2009年に始まったセールスツールです.Corp Americaで働いたことがあっても、新しいものを追加するためのお金はありますが、それを正しく再構築する予算はありません。それはコードのサーカス、私のものが含まれている、すべてダクトテープとスーパーグルーと一緒に置く。 :D – PruitIgoe

関連する問題