2013-05-07 48 views
3

我在UITableView的單元格內創建了一個自定義下拉菜單,將此菜單添加爲單元格內容視圖的子視圖。TouchesBegin作爲UITableViewCell的子視圖在UIView中未觸發

當我單擊單元格內的菜單時,我放大視圖以顯示所有菜單項:現在菜單視圖位於tableView和所有單元格之上。

因此,當我選擇我的自定義視圖中的項目時,TouchesBegan只會觸發在UITableView單元格中的部分視圖,而在我調用該菜單的UITableView單元格中並非在所有放大的視圖中。

如果我觸摸部分位於另一個單元格上的視圖,TouchesBegan會在表視圖的單元格中觸發它,而不是在所有單元格頂部的視圖中觸發。

有什麼建議嗎?

回答

0

視圖通常不會響應視圖上的觸摸事件或其邊界外繪製的視圖部分。有幾個可能的方案來解決該問題:

  • 放大單元格時下拉菜單可見,以適應整個菜單,但是這可能取決於你的設計在視覺效果產生負面影響。

  • 在控制器上添加菜單而不是單元格視圖。如果您有此路線,則可以使用表格視圖中的UIScrollViewDelegate事件在用戶滾動表格時重新定位菜單。請記住,如果菜單顯示在最後一個單元格上,並且如果總是向下繪製,可能會透支控制器的邊界。

  • 覆蓋hitTest:withEvent:pointInside:withEvent在您的菜單視圖和它的超級視圖上,以通知操作系統即使在正常界限之外也響應事件。

+0

我已暫時解決您提出的第一個解決方案。我嘗試了重寫hitTest和pointInsid,但每次觸摸視圖時我都在另一個單元格中的另一個菜單上放大,系統觸發histTest在我放大視圖下的視圖中。 – user2208094 2013-05-09 09:57:43

+0

你可以發佈你的更新實施? – jszumski 2013-05-10 12:58:49

0

以下爲我工作:

子類的電池並連接佈局與細胞根視圖:

細胞
@interface CustomCell : UITableViewCell 

@property (weak, nonatomic) IBOutlet UIView *rootView; 

@end 

覆蓋則hitTest這樣的:

@implementation CustomCell 

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    BOOL res = [self.rootView pointInside:point withEvent:event]; 
    if(res){ 
     return [self.rootView hitTest:point withEvent:event]; 
    } 
    return [super hitTest:point withEvent:event]; 
} 

@end 

現在touchesBegin/Move/End/Cancel將被傳遞到視圖並且它的層次結構只要觸發h是在該視圖內

相關問題