自定义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。任何帮助被赞赏。
答
试试这个:
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;
}
}
对于自定义单元格u渲染一个'TableCell'的权利,当点击我假设我应该在ur表格单元格中调用'button clicked'方法。试着把一个断点,看看它应该点击它时应该调用视图,这扩展了TabbleCell – Smit