我已經實現了一個UITableView
,其中包含一個內部爲UITableView
的自定義UITableViewCell
,我能夠正確綁定所有數據,但是我錯過的是未在我的內部激發的事件UITableViews
。UITableView在UITableViewCell事件中丟失
基本上是:
outer UITableView
----custom cell
---- ---- ----inner UITableView #1
---- ---- ---- ----custom cell with two rows, row#1 with labels
---- ---- ---- ----custom cell with two rows, row#2 with swipe gesture
----custom cell
---- ---- ----inner UITableView #2
---- ---- ---- ----custom cell with two rows, row#1 with labels
---- ---- ---- ----custom cell with two rows, row#2 with swipe gesture
----custom cell
---- ---- ----inner UITableView #3
---- ---- ---- ----custom cell with two rows, row#1 with labels
---- ---- ---- ----custom cell with two rows, row#2 with swipe gesture
等等
內UITableView
內的滑動手勢將不會觸發任何事件實際上是被解僱。我嘗試覆蓋觸摸事件,但他們沒有被擊中。我嘗試了很多事情,包括調用NextResponder觸摸事件無濟於事。
含外UITableView
的看法是滾動的,也許有什麼關係呢?
我想實現的是,僅列#2被偷走,而不是整個內部UITableView
(從外完成時,它的工作原理UITableView
但它不是,因爲兩行#1和#2刷卡的要求),但由於事件不會傳遞下去,我無法讓它工作。
我錯過了什麼?
這是我的限定內UITableView
外UITableView
定製細胞內:
public PlanningGwWrapperCell(IntPtr handle) : base(handle)
{
_playersTable = new PlanningPlayersTableView();
_playersTableSource = new MvxPlanningGwPlayersTableViewSource(_playersTable);
_layout = CreateLayout();
_playersTable.Source = _playersTableSource;
_playersTable.Delegate = new PlanningGwPlayersTableDelegate();
ContentView.AddSubview(new UILayoutHost(_layout));
InitializeBindings();
_playersTable.ReloadData();
}
的_layout是一個的LinearLayout(XibFree)。
的UITableView的很簡單:
class PlanningPlayersTableView : UITableView
{
public PlanningPlayersTableView()
{
PrepareTable();
}
void PrepareTable()
{
SeparatorStyle = UITableViewCellSeparatorStyle.None;
RowHeight = Dimens.TableRowHeight;
ScrollEnabled = false;
BackgroundColor = Colors.AppBackground;
}
}
表來源:
public class MvxPlanningGwPlayersTableViewSource : BaseMvxTableViewSource<PlanningGwPlayersCell>
{
public MvxPlanningGwPlayersTableViewSource(UITableView tableView)
: base(tableView)
{
}
public override nint RowsInSection(UITableView tableview, nint section)
{
return 1;
}
public override nint NumberOfSections(UITableView tableView)
{
return 1;
}
public override bool CanEditRow(UITableView tableView, NSIndexPath indexPath)
{
var source = (MvxPlanningGwPlayersTableViewSource)tableView.Source;
var itemsSource = (source).ItemsSource;
if (itemsSource == null) return false;
var row = ((ObservableCollection<PlanningGWItemsViewModel>)itemsSource)[indexPath.Row];
return row.CanAdd || row.CanRemove;
}
public override void CommitEditingStyle(UITableView tableView, UITableViewCellEditingStyle editingStyle, NSIndexPath indexPath)
{
switch (editingStyle)
{
case UITableViewCellEditingStyle.None:
break;
}
}
public override UITableViewCellEditingStyle EditingStyleForRow(UITableView tableView, NSIndexPath indexPath)
{
return UITableViewCellEditingStyle.Delete;
}
protected override UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item)
{
return (PlanningGwPlayersCell)tableView.DequeueReusableCell(PlanningGwPlayersCell.Id);
}
}
那麼如何傳承的事件任何線索?外部表可以只響應滾動事件,而所有其他事件由內部表處理嗎?
UPDATE
原來,問題有以下行做:
ContentView.AddSubview(new UILayoutHost(_layout));
的UILayoutHost正在吞噬的事件,如果我把表裏面直接作爲一個子視圖,事件被存管。