here scenario encountering. having login screen username 1 of fields. user can select user using dropdown list (implemented via button - simulate drop down arrow, popover controller , table view). having controller (usernamecontroller) has logic of fetching usernames , binding same table view within it. usernamecontroller called via viewcontroller.cs has textfield , dropdown button using below code:
var content = this.storyboard.instantiateviewcontroller("usernamelookup") usernamecontroller; uipopovercontroller popover = new uipopovercontroller(content); //popover.setpopovercontentsize(new sizef(80, 80), true); popover.presentfromrect(new rectanglef(float.parse((sender.frame.x + 115).tostring()), float.parse((sender.frame.y + 180).tostring()) , 80, 80), view, uipopoverarrowdirection.up, true);
and in usernamecontroller:
public override void viewdidload() { string[] username = new string[10]; tblvwusername.source = new tablesource(username); } }
and tabelsource.cs looks this:
public class tablesource : uitableviewsource { string[] tableitems; string cellidentifier = "tablecell"; public tablesource(string[] items) { tableitems = items; } public override nint rowsinsection(uitableview tableview, nint section) { return tableitems.length; } public override uitableviewcell getcell(uitableview tableview, nsindexpath indexpath) { uitableviewcell cell = tableview.dequeuereusablecell(cellidentifier); string item = tableitems[indexpath.row]; //---- if there no cells reuse, create new 1 if (cell == null) { cell = new uitableviewcell(uitableviewcellstyle.default, cellidentifier); } cell.textlabel.text = item; return cell; } public override void rowselected(uitableview tableview, nsindexpath indexpath) { // how set username text field in viewcontroller? , close popup tableview.deselectrow(indexpath, true); } }
now how need display selected username in viewcontroller's textfield , close popup?
thanks! sid
i typically solve requirement properties on tableviewsource , tableviewcontroller. source change to:
public class tablesource : uitableviewsource { string[] tableitems; string cellidentifier = "tablecell"; public string selecteditem {get; set;} public tablesource(string[] items) { tableitems = items; } public override nint rowsinsection(uitableview tableview, nint section) { return tableitems.length; } public override uitableviewcell getcell(uitableview tableview, nsindexpath indexpath) { uitableviewcell cell = tableview.dequeuereusablecell(cellidentifier); string item = tableitems[indexpath.row]; //---- if there no cells reuse, create new 1 if (cell == null) { cell = new uitableviewcell(uitableviewcellstyle.default, cellidentifier); } cell.textlabel.text = item; return cell; } public override void rowselected(uitableview tableview, nsindexpath indexpath) { selecteditem = items[indexpath.row]; tableview.deselectrow(indexpath, true); } }
now need way value. there 2 possible ways:
1) usernamecontroller of type uitableviewcontroller, (content.tableview.source tablesource).selecteditem
2) usernamecontroller not of type uitableviewcontroller, add property returns property of tableviewsource.
last thing closing popover , query selected item. task wrap usernamecontroller in uinavigationcontroller , add cancel , done button this:
var navigationcontroller = new uinavigationcontroller(content); var popover = new uipopovercontroller(navigationcontroller); content.navigationitem.setleftbarbuttonitem(new uibarbuttonitem(uibarbuttonsystemitem.cancel, (s, e) => { parentcontroller.dismissviewcontroller(true, null); }), true); content.navigationitem.setrightbarbuttonitem(new uibarbuttonitem(uibarbuttonsystemitem.done, (s, e) => { parentcontroller.dismissviewcontroller(true, null); var selecteditem = (content.source tablesource).selecteditem; }), true);
Comments
Post a Comment