2015-09-09 47 views
1

在UITableViewController中我有一個方法來更新顯示總價格的底部工具欄。從Xamarin中的自定義UITableViewController在UITableViewController中的調用方法

 public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
     { 
      var cell = (CartCell)tableView.DequeueReusableCell(CellIdentifier, indexPath); 
      if (cell == null) 
      { 
       cell = new CartCell(this.Handle); 
      } 
      cell.UpdateCartCell(tableItems[indexPath.Row]); 
      return cell; 
     } 

在UITableViewCell中我有一個UIStepper。我無法弄清楚,如何在UITableViewController中調用方法,當按下步進器時,所以我將能夠更新我的底部工具欄文本。

partial class CartCell : UITableViewCell 
{ 
    int quantity; 
    float cartItemTotal; 

    public CartCell(IntPtr handle) 
     : base(handle) 
    { 
    } 

    public void UpdateCartCell(CartItem cartItem) 
    { 
     quantity = cartItem.Quantity; 
     cartItemTotal = cartItem.thisTotal; 

     productName.Text = cartItem.Name; 
     productDescription.Text = cartItem.Description; 
     productQuantyty.Text = quantity.ToString(); 
     productPrice.Text = cartItem.Price; 
     stepper.Value = quantity; 
     stepper.MinimumValue = 1; 
     stepper.ValueChanged += (o, s) => 
     { 
      double value = stepper.Value; 

      #region **** QTY Remove**** 
      if (value < quantity) 
      { ... } 
      #endregion 

      #region **** QTY Add**** 
      if (value > quantity) 
      { ... } 
      #endregion 
     }; 
    } 
} 

回答

0

在CartCell我已經添加NSNotificationCenter.DefaultCenter.PostNotificationName(「ValueDidChanged」,this);

public void UpdateCartCell(CartItem cartItem) 
{ 
    stepper.ValueChanged += (o, s) => 
    { 
     double value = stepper.Value; 

     #region **** QTY Remove**** 
     if (value < quantity) 
     { ... } 
     #endregion 

     #region **** QTY Add**** 
     if (value > quantity) 
     { ... } 
     #endregion 
     NSNotificationCenter.DefaultCenter.PostNotificationName("ValueDidChanged", this); 
    }; 
} 

而在UITableViewController中,我聽通知:

 observer = NSNotificationCenter.DefaultCenter.AddObserver((NSString)"ValueDidChanged", UpdateSettings); 

,並調用方法來更新總:

void UpdateSettings(NSNotification obj) 
    { 
     UpdateTotal(); 
    } 
2

我有一個類似的情況,我需要這樣的功能。我所做的是將一個事件添加到單元格中,並在我的UITableViewSource中使用該事件,該事件引用了控制器。

+0

謝謝你,是的,這是解決這個問題的好辦法,但最後我找出並實施通知。如果您使用通知,則需要更少的代碼。 – Djonkwt

0

如果您想保持iOS的感覺,您可以使用iOS委託模式(請參閱Xamarin站點上的Events, Delegates and Protocols部分)。基本上,你會聲明一個協議(用C#語言中的接口)來通知觀察類(在你的情況下是UITableViewController實例),例如,

public interface CartCellStepperDelegate 
{ 
    void cartCellValueChanged(int value); 
} 

對代理的弱引用應該保留在您的觀察類中,CartCell的實例可以與之通信。

這就像在UITableViewController實例中實現接口一樣簡單,並且一旦動作就相應地執行。這與C#事件類似(順便說一下,這是另一個選項,您可以在CartCell類中定義事件並將其綁定到Stepper上的觸摸事件的位置)。

相關問題