CustomCell中的TextField Change事件

时间:2015-12-01 17:11:14

标签: ios uitableview xamarin custom-cell

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

我还有一个类(SettingCustomCell),我以编程方式创建了TextFields来显示StartEnd值。

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

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 个答案:

答案 0 :(得分:1)

  1. 在tablecell中创建eventhandler。当您的UITextField文本更改时,请调用此事件处理程序。

    public EventHandler<bool> EditingChanged;
    //some code here
    firstTextField.ValueChanged += (s, e) => {
         if(EditingChanged!=null)
             EditingChanged(this,true);
    }
    
  2. 在您的DataSource中,您订阅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
       }