我有一個帶有UITableView的Xamarin.iOS應用程序。視圖中只有一個部分。如果我將手指放在表格的一行上(比如第5行),暫時保持一段時間,然後滾動表格視圖,該行就會突出顯示。這是不太可取的,但沒有什麼大不了的。但是,如果我然後點擊另一行(比如說第10行)來選擇它,我的UITableViewSource對象就會獲得一個RowSelected回調函數,它與最初接觸到的行相同。這是一個很大的問題,因爲應用程序現在認爲用戶選擇了錯誤的行。此外,我無法看到任何以正確敲擊行到達的回叫。UITableViewCell在滾動過程中突出顯示,然後再選中
我試圖通過在滾動結束時取消選擇該行來解決此問題。它沒有幫助。
我有一個非Xamarin版本的應用程序沒有表現出這種行爲。
下面是一些我的代碼(通過自定義UITableViewSource子類),輸出:
public int HighlightedRowIndex {get;set;} = -1;
public override void RowHighlighted(UITableView tableView, NSIndexPath rowIndexPath) {
// I actually don't want to be looking at highlighted at all; I'm just going here to try to understand/fix the problem.
CommonDebug.LogLine("row highlighted", (int)rowIndexPath.Row);
this.HighlightedRowIndex = rowIndexPath.Row;
}
public override void DraggingEnded(UIScrollView scrollView, bool willDecelerate) {
int highlighted = this.HighlightedRowIndex;
if (highlighted >= 0) {
NSIndexPath indexPath = NSIndexPath.FromRowSection(0, (nint)highlighted);
UITableView tableView = scrollView as UITableView;
if (tableView!=null) {
CommonDebug.LogLine("ATTEMPTING HACK FIX, BUT IT DOES NOT HELP");
// tableView.SelectRow(indexPath, false, UITableViewScrollPosition.None); // This can be commented out, or not; it doesn't help either way.
tableView.DeselectRow(indexPath, false);
}
}
this.HighlightedRowIndex = -1;
}
public override bool ShouldHighlightRow(UITableView tableView, NSIndexPath rowIndexPath) {
CommonDebug.LogLine("should highlight", (int)rowIndexPath.Row);
// Returning false from here would prevent the problem, but would also prevent any selection . . .
return true;
}
public override void RowSelected(UITableView tableView, NSIndexPath indexPath) {
CommonDebug.LogLine("IOSListViewSource selected", indexPath.Row);
if (this.SelectIgnoreCount == 0) {
ListViewSectionModel model = this.GetModel();
int row = (int)indexPath.Row;
model.SelectItem(row);
} else {
CommonDebug.LogLine("ignoring");
}
}
輸出:
我把我的手指上5排,讓它留在那裏了一下,然後滾動表視圖:
should highlight 5
row highlighted 5
ATTEMPTING HACK FIX, BUT IT DOES NOT HELP
然後我點擊行10:
WillSelectRow 5
IOSListViewSource selected 5
沒有跡象我可以發現第10行被竊聽。
有沒有人有同樣的問題/找到解決辦法?