2012-02-11 77 views
1

我有一個非常複雜的UITableViewCell子類,我發現在Instruments中,[super layoutSubviews]調用在滾動表視圖時消耗了5%的運行時間。所以我嘗試省略[super layoutSubviews]調用,因爲我自己完成所有子視圖的佈局。它確實給了我一個性能提升。但是,我發現如果沒有調用,像按鈕之類的交互式子視圖就不會再收到觸摸事件。如何忽略UITableViewCell的[super layoutSubviews]調用?

所以我的問題是如何在我的UITableViewCell子類中省略[super layoutSubviews]調用以獲得性能提升而不會將觸摸事件傳遞到子視圖?

回答

0

最後跟蹤它。這是因爲cell.contentView.frame爲(0,0,320,44),未調用[super layoutSubviews],且邊界不夠大(特別是高度44不夠高)以包含所有交互式子視圖。據-hitTest:withEvent:商務部:

點擺在外面的接收器的界限從未報道 命中,即使他們實際上在於接收器的子視圖中的一個內。 如果當前視圖的clipsToBounds屬性設置爲 否,並且受影響的子視圖超出視圖的邊界,則會發生這種情況。

這就是這裏的情況。

+0

我遇到了確切的問題。你最終的解決方案是什麼?你添加了[super layoutSubviews]還是隻調整了contentView的框架?你認爲我們應該手動添加tableviewcell layoutsubview還有什麼? – 2013-10-12 11:42:41

+0

@Don layout contentView手動。 – an0 2013-10-12 14:59:43

0

您是否嘗試通過子視圖枚舉並將userInteractionEnabled設置爲YES?仍然是一種黑客,但如果這真的是唯一缺少的東西,它應該工作。

祝你好運,

達明

+0

所有相關子視圖的'userInteractionEnabled'設置爲'YES'。 – an0 2012-02-12 08:23:33

+0

嗯,我不知道layoutSubviews調用是什麼添加到控件的手勢識別器。這可能是一個問題 - 您可以通過枚舉按鈕上的手勢識別器並查看它是否有任何測試來驗證該理論。你可能會檢查的另一件事是如果superview中的exclusiveTouch屬性設置爲YES(似乎不太可能,因爲默認值是NO)。對不起,沒有一個可靠的答案。祝你好運。 – 2012-02-12 09:10:39