0

基本的に私が望むのは、編集ボタンをクリックすると、「作成」セルがリストに追加され、別のスクリーンコントローラーに移動して追加することです。現在、挿入だけでなく削除も機能しています(空白のセルをテーブルに挿入するだけです)。誰でもこれを手伝ってもらえますか?ありがとう。以下は私のコードです...

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);



        }



    }
4

1 に答える 1

0

GetCell() および RowSelected() メソッドでは、それが「作成」セルである場合のケースを追加するだけです。

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

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

于 2012-04-05T21:25:48.833 に答える