CustomCell 中的 TextField Change 事件

TextField Change event in a CustomCell

我一直在 Xamarin.iOS 平台上开发 CustomCell。以下代码工作正常。我有 tableItems,它是存储 StartEnd 值的列表。

我还有一个 class(SettingCustomCell),我在其中以编程方式创建了 TextFields 以显示 StartEnd 值。

我想知道当用户在我当前的实现中更改 TextField 中的 StartEnd 值时,我如何 detect/capture。

MainTableViewController

tableItems.Add (new TableItem() {Start=1000, End=4000});
tableItems.Add (new TableItem() {Start=4000, End=6000});

public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
    SettingsCustomCell cell = tableView.DequeueReusableCell (cellIdentifier) as SettingsCustomCell;

    if (cell == null) {
        cell = new SettingsCustomCell (cellIdentifier);
    }

    cell.UpdateCell (tableItems [indexPath.Row].Start, tableItems [indexPath.Row].End);

    return cell;
}

SettingsCustomCell

public CustomCell (NSString cellId) : base (UITableViewCellStyle.Default, cellId)
{
    SelectionStyle = UITableViewCellSelectionStyle.None;

    firstLabel = new UITextField ();
    secondLabel = new UITextField ();

    ContentView.Add (firstLabel);
    ContentView.Add (secondLabel);
}

public void UpdateCell (int caption, int subtitle)
{
    firstLabel.Text = caption.ToString();
    secondLabel.Text = subtitle.ToString();
}
  1. 在表格单元格中创建事件处理程序。当您的 UITextField 文本更改时调用此事件处理程序。

    public EventHandler<bool> EditingChanged;
    //some code here
    firstTextField.ValueChanged += (s, e) => {
         if(EditingChanged!=null)
             EditingChanged(this,true);
    }
    
  2. 在您的数据源中订阅 EditingChanged 事件并创建另一个事件处理程序,它将在执行 EditingChanged 时调用。

      public EventHandler<bool> SourceEditingChanged;
      public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
      {
            SettingsCustomCell cell = tableView.DequeueReusableCell (cellIdentifier) as SettingsCustomCell;
    
            if (cell == null) {
                  cell = new SettingsCustomCell (cellIdentifier);
            }
           cell.UpdateCell (tableItems [indexPath.Row].Start, tableItems [indexPath.Row].End);
    
           cell.EditingChanged += {
               if(SourceEditingChanged!=null)
                    SourceEditingChanged(this,true);
           }; 
          return cell;
      }
    
  3. 从 viewController 订阅您的 SourceEditingChange 事件。

       MySource.SourceEditingChange += (s,e) =>{
            //Your Code here
       }