2012-04-05 11 views
0

基本的には、編集ボタンをクリックすると、追加する別のスクリーンコントローラにナビゲートする「作成」セルがリストに追加されます。私は現在、(テーブルに空のセルを挿入するだけでなく)挿入だけでなく、削除作業があります。誰もこれで助けることができますか?ありがとう。次はあなたのgetcellをでCommitEditingStyleモノトゥッチに挿入

private class UserAlertsTableViewSource : UITableViewSource 

    { 

     const string DEFAULT_CELL = "UserAlertsCell"; 

     private UserAlertsListController _useralertslistController; 

     public UserAlertsTableViewSource(UserAlertsListController useralertslistController) 
     { 
      this._useralertslistController = useralertslistController; 
     } 



     public override int RowsInSection(UITableView tableView, int section) 
     { 
      return _useralertslistController.Alerts.Count; 

     } 

     public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
     { 
      int row = indexPath.Row; 

      var cell = tableView.DequeueReusableCell(DEFAULT_CELL) as UserAlertsCell; 


      if (null == cell) { 
       cell = new UserAlertsCell(); 
       var views = NSBundle.MainBundle.LoadNib("UserAlertsCell", cell, null); 
       cell = Runtime.GetNSObject(views.ValueAt(0)) as UserAlertsCell; 


      } 




      cell.Name = _useralertslistController.Alerts[indexPath.Row].LakeName; 
       cell.AlertLevel = _useralertslistController.Alerts[indexPath.Row].AlertLevel; 
      cell.AlertVariance = _useralertslistController.Alerts[indexPath.Row].AlertVariance; 





      return cell; 
     } 


     public override void RowSelected(UITableView tableView, NSIndexPath indexPath) 
     { 
      SelectItem (tableView, indexPath); 
     } 

     public override void AccessoryButtonTapped(UITableView tableView, NSIndexPath indexPath) 
     { 
      SelectItem(tableView, indexPath); 
     } 

     public override float GetHeightForRow(UITableView tableView, NSIndexPath indexPath) 
     { 
      return 60f; 

     } 

     public void SelectItem(UITableView tableView, NSIndexPath indexPath) 
     { 
     // MapController mapController = new MapController(); 
     // _lakelevelsController.NavigationController.PushViewController(mapController, true); 
     } 


    // public override bool CanEditRow (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath) 
    // { 
    //  return true; 
    // } 



    public override UITableViewCellEditingStyle EditingStyleForRow (UITableView tableView, NSIndexPath indexPath) 
     { 

      var count = this._useralertslistController.Alerts.Count; 
      if (indexPath.Row == count-1) 
      { 
       return UITableViewCellEditingStyle.Insert; 
      }else 
      { 
       return UITableViewCellEditingStyle.Delete; 
      } 





     } 




     public override void CommitEditingStyle (UITableView tableView, UITableViewCellEditingStyle editingStyle, NSIndexPath indexPath) 
     { 

     switch (editingStyle) 
      { 
      case UITableViewCellEditingStyle.Delete: 

      this._useralertslistController.Alerts.RemoveAt (indexPath.Row); 
      tableView.DeleteRows (new NSIndexPath[] { indexPath } , UITableViewRowAnimation.Fade); 
       break; 


      case UITableViewCellEditingStyle.Insert: 
      this._useralertslistController.Alerts.Insert (indexPath.Row, new AlertSettings()); 
       tableView.InsertRows (new NSIndexPath[] { indexPath }, UITableViewRowAnimation.Fade); 

       break; 

      case UITableViewCellEditingStyle.None: 
       Console.WriteLine ("CommitEditingStyle: None called"); 
       break; 

     } 
     } 

     public override void MoveRow (UITableView tableView, NSIndexPath sourceIndexPath, NSIndexPath destinationIndexPath) 
     { 

      var item = this._useralertslistController.Alerts[sourceIndexPath.Row]; 
      int deleteAt = sourceIndexPath.Row; 
      if (destinationIndexPath.Row < sourceIndexPath.Row) 
      { 
       deleteAt = sourceIndexPath.Row + 1; 
      } 
      this._useralertslistController.Alerts.Insert (destinationIndexPath.Row, item); 
      this._useralertslistController.Alerts.RemoveAt (deleteAt); 



     } 



    } 
+0

問題はなんですか?それは何をしているのですか? – Jason

+0

編集してください! – k1komans

+0

編集ボタンに結びつけるのではなく、常に「作成」セルを表示するのはなぜですか? – Jason

答えて

0

(...私のコードである)とRowSelected()メソッドは、ちょうどそれが「作成」セルである場合のケースを追加します。

if (indexPath.Row == _useralertscontroller.Alerts.Count) 
{ 
    // this is the +1 cell, so do something special 
} 

余分な行を追加するには、RowsInSection()も変更する必要があります。