xamarin - UITableView row swipe action not working with XamarinSidebar -
i'm using xamarin.ios xamarinsidebar, have problem mvxtableviewsource in editactionsforrow event, if don't use presentation using xamarinsidebar, example presenting in modal, detects event perfectly, , shows me content, if show xamarinsidebar doesn't detect horizontal swipe.
customviewcontroller:
[mvxsidebarpresentation(mvxpanelenum.center, mvxpanelhinttype.resetroot, true, mvxsplitviewbehaviour.detail)] public partial class customviewcontroller : mvxviewcontroller<customviewmodel> { public customviewcontroller() : base("customviewcontroller", null) { } public override void viewdidload() { base.viewdidload(); var set = this.createbindingset<customviewcontroller, customviewmodel>(); var source = new tableviewsource(tableview); set.bind(source).for(s => s.itemssource).to(vm => vm.customlist); tableview.source = source; set.apply(); } } and tableviewsource:
public class tableviewsource : mvxtableviewsource { public list<customitems> tableitems { { return itemssource list<customitems>; } } string cellidentifier = "customcell"; public chatcontacttableviewsource(uitableview tableview) : base(tableview) { } public override nint rowsinsection(uitableview tableview, nint section) { return tableitems.count; } public override void rowselected(uitableview tableview, nsindexpath indexpath) { contact item = tableitems[indexpath.row]; console.writeline("item selected: " + item.contactname); } public override uitableviewrowaction[] editactionsforrow(uitableview tableview, nsindexpath indexpath) { list<uitableviewrowaction> items = new list<uitableviewrowaction>(); //button var button = uitableviewrowaction.create(uitableviewrowactionstyle.normal, "delete", delegate { console.writeline("deletebutton"); }); button.backgroundcolor = uicolor.red; items.add(button); //i have more 1 button here return items.toarray(); } public override bool caneditrow(uitableview tableview, nsindexpath indexpath) { return true; } public override void commiteditingstyle(uitableview tableview, uitableviewcelleditingstyle editingstyle, nsindexpath indexpath) { console.writeline("editing style"); if (editingstyle == uitableviewcelleditingstyle.delete) { tableitems.removeat(indexpath.row); } } protected override uitableviewcell getorcreatecellfor(uitableview tableview, nsindexpath indexpath, object item) { var cell = tableview.dequeuereusablecell(cellidentifier) customcell; customitems itemcustom = tableitems[indexpath.row]; //---- if there no cells reuse, create new 1 if (cell == null) { cell = customcell.create(); } cell.labeltext.text = itemcustom.name; return cell; } } solved implementing:
public class basemenuviewcontroller<tviewmodel> : basemenuview<tviewmodel>, imvxsidebarmenu tviewmodel : class, imvxviewmodel { public virtual uiimage menubuttonimage => uiimage.frombundle("threelines"); public virtual bool animatemenu => true; public virtual float darkoverlayalpha => 0.7f; public virtual bool hasdarkoverlay => true; public virtual bool hasshadowing => false; public virtual bool disablepangesture => true; //here solution public virtual bool reopenonrotate => true; private int maxmenuwidth = 304; private int minspacerightofthemenu = 55; public int menuwidth => userinterfaceidiomisphone ? int.parse(uiscreen.mainscreen.bounds.width.tostring()) - minspacerightofthemenu : maxmenuwidth; private bool userinterfaceidiomisphone { { return uidevice.currentdevice.userinterfaceidiom == uiuserinterfaceidiom.phone; } } public virtual void menuwillopen() { } public virtual void menudidopen() { } public virtual void menuwillclose() { } public virtual void menudidclose() { } }
Comments
Post a Comment