自定义TableCell按钮在iOS中点击新的ViewController(Xamarin)

问题描述:

我已经为我的TableView创建了Custom TableCell。在自定义单元格中,我有Button。所以我想在按钮点击时打开New ViewController,并在其上发送数据。所以如何在自定义TableCell中创建事件来打开新的ViewController。自定义TableCell按钮在iOS中点击新的ViewController(Xamarin)

我是这样创建的这是正确的方式吗?

我CustomCell:

public partial class CaseHistotyTableCell : UITableViewCell 
    { 
     public static readonly NSString Key = new NSString("CaseHistotyTableCell"); 
     public static readonly UINib Nib; 

     static CaseHistotyTableCell() 
     { 
      Nib = UINib.FromName("CaseHistotyTableCell", NSBundle.MainBundle); 
     } 

     protected CaseHistotyTableCell(IntPtr handle) : base(handle) 
     { 
      // Note: this .ctor should not contain any initialization logic. 
     } 

     public static CaseHistotyTableCell Create() 
     { 
      return (CaseHistotyTableCell)Nib.Instantiate(null, null)[0]; 
     } 
     internal void BindData(string hospitalLabel, string addressLabel, string drLabel, string patientLabel) 
     { 
      this.lbl_hospitalName.Text = hospitalLabel; 
      this.lbl_address.Text = addressLabel; 
      this.lbl_drName.Text = drLabel; 
      this.lbl_patientName.Text = patientLabel; 

      this.lbl_address.TextColor = UIColor.Clear.FromHexString("#000000", 0.54f); 
      this.lbl_patientName.TextColor = UIColor.Clear.FromHexString("#000000", 0.54f); 
      this.lbl_hospitalName.TextColor = UIColor.Clear.FromHexString("#000000", 0.87f); 
      this.lbl_drName.TextColor = UIColor.Clear.FromHexString("#000000", 0.87f); 
      this.btn_createAppointment.SetTitleColor(UIColor.Clear.FromHexString("#0072BA",1.0f), UIControlState.Normal); 
      this.btn_viewDetail.SetTitleColor(UIColor.Clear.FromHexString("#0072BA", 1.0f), UIControlState.Normal); 

      this.btn_viewDetail.TouchUpInside += (sender, e) => 
      { 

      }; 


     } 



     public override CGRect Frame 
     { 
      get 
      { 
       return base.Frame; 
      } 

      set 
      { 
       value.Y += 4; 
       value.Height -= 2 * 4; 
       base.Frame = value; 
      } 
     } 
    } 

SourceClass:

public class CaseHistorySourceClass : UITableViewSource 
    { 
     private List<CaseSearchItem> caseSearchItems; 
     public CaseSearchItem caseSearchItem; 

    public CaseHistorySourceClass(List<CaseSearchItem> caseSearchItems) 
    { 
     this.caseSearchItems = caseSearchItems; 
    } 
    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
    { 
     CaseHistoryTableCell cell = tableView.DequeueReusableCell(CaseHistoryTableCell.Key) as CaseHistoryTableCell ?? CaseHistoryTableCell.Create(); 
     var item = caseSearchItems[indexPath.Row]; 

     cell.BindData(item.Organization, item.Address, item.Doctor, item.UserName); 

     cell.Layer.MasksToBounds = false; 
     cell.Layer.CornerRadius = 10.0f; 
     cell.BackgroundColor = UIColor.White; 



     return cell; 
    } 

    public override nint RowsInSection(UITableView tableview, nint section) 
    { 
     return caseSearchItems.Count; 
    } 


} 

我是新来的iOS和Xamarin。任何帮助被赞赏。

+0

对于自定义单元格u渲染一个'TableCell'的权利,当点击我假设我应该在ur表格单元格中调用'button clicked'方法。试着把一个断点,看看它应该点击它时应该调用视图,这扩展了TabbleCell – Smit

试试这个:

this.btn_viewDetail.TouchUpInside += (sender, e) => 
    { 
    TargetController myTarget = new TargetController(); 
    myTarget.YourString = "Your value here"; 
    this.NavigationController.PushViewController(myTarget, true); 
    }; 
+0

我想'按钮'上点击不是'RowClick'。 – Ironman

在您的视图控制器,在那里你定义你的数据源泰伯维,添加变量,例如您的视图控制器..

public class mytableDataSource : UITableViewSource 
    { 
     private ViewController owner; 
     List<string> tableItems; 
     public mytableDataSource(ViewController cntrlr, List<string items) 
     { 
      tableItems = items; 
      owner = cntrlr; 

     } 

     public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
     { 
      var cell = tableView.DequeueReusableCell("your identifier"); 
      //cell. BindData(..... 
      cell.getDetailButton.Tag = indexPath.Row; 
      cell.getDetailButton.TouchUpInside -= handler; 
      cell.getDetailButton.TouchUpInside += handler; 

     } 
     void handler(Object sender, EventArgs args) 
     { 
      nint tag = btn.Tag; 
      TargetController myTarget = new TargetController(); 
      myTarget.YourString = list[]; 
      owner.NavigationController.PushViewController(myTarget, true); 
     } 

    } 

指定数据源到你的tableview时,例如:

tbl.Source = new mytableDataSource(lstService, this); 
    tbl.ReloadData(); 

要使视图控制器中的单元格按钮可用,请在cs文件中创建Property。

public UIButton getDetailButton 
    { 
    get 
     { 
      return btn_viewDetail; 
     } 
    } 
+0

等我试试这个,稍后再告诉你。 – Ironman

+0

@Ironman我已经更新了使用处理程序的答案,以避免在多次调用单元格时在按钮上获取多个委托。 – Darshana

+0

我无法在'GetCell'方法中访问'this.btn_viewDetail.Tag = indexPath.Row;'? – Ironman