2012-04-05 3 views
0

В основном, что бы мне хотелось, если нажата кнопка редактирования, к моему списку добавляется ячейка «Создать», которая будет перемещаться на отдельный контроллер экрана для добавления. В настоящее время у меня работает удаление, а также вставка (там, где она просто вставляет пустую ячейку в вашу таблицу). Может кто-нибудь помочь с этим? Благодарю. Ниже приведен мой код ...Вставить на CommitEditingStyle Monotouch

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

смотрите править sir! – k1komans

+0

Почему бы не просто всегда отображать ячейку «Создать», а не привязывать ее к кнопке редактирования? – Jason

ответ

0

В ваших GetCell() и RowSelected() методы просто добавьте случай, когда это ячейка «Создать».

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

Вам также необходимо изменить RowsInSection(), чтобы добавить дополнительную строку.

Смежные вопросы