2015-06-24 81 views
0

,並且提前感謝您花時間提供幫助。在點擊UITableViewCell中的DesignableView時遇到問題,以便更改

裏面我的cellForRowAtIndexPath,我有以下行:

cell.timeView.addTarget(self, action: "ButtonDidPress:", forControlEvents: UIControlEvents.TouchUpInside)

,我的選擇功能:

func ButtonDidPress (sender: DesignableView!){ 
    let view:DesignableView = sender 
    cell.timeView.shadowColor = UIColor.yellowColor() 
    table.reloadData() 
} 

和我得到的錯誤是:

unrecognized selector sent to instance 

我在想,也許不能發送視圖作爲選擇器(我是否使用了正確的術語?),但是我還可以如何將該特定視圖定位到該單元格中?

UPDATE:

我也用gestureRecognizer而不是嘗試:

var tap = UIGestureRecognizer(target: self, action: Selector("viewDidTap:")) 
    cell.timeView.addGestureRecognizer(tap) 

func viewDidTap (sender: DesignableView!){ 

,但我在這裏得到了同樣的錯誤。

謝謝!

+0

不DesignableView從UIButton的繼承?此外,是類型DesignableView的timeView?如果它繼承自UIView,則可能需要使用UITapGestureRecognizer。然後,我會使用塊或委託將其發送回視圖控制器。 –

+0

沒有DesignableView不會從UIButton繼承,我的想法是當該按鈕被按下時我想要定位視圖。我嘗試了你的建議,但我仍然得到同樣的錯誤。我的代碼示例已相應更新。 – Glenncito

+0

手勢發送者錯誤。它應該是發件人:UITapGestureRecognizer。同時使手勢輕點。換句話說,UITapGestureRecognizer。 –

回答

2

在代碼中發生了一些奇怪的事情。看來你想在用戶觸摸時更改timeViewshadowColor屬性,對吧?

兩個可能的解決方案是:

  1. (這個是IMO最好的一個)更改DesignableViewUIButton繼承。那麼你可以設置: timeView.addTarget(self, action: "ButtonDidPress:", forControlEvents: .TouchUpInside)。確保您爲每個單元格設置一次。否則,您將一次點擊多次。

  2. 使用UITapGestureRecognizer,但你應該把它放在你的UITableViewCell子類中,而不是視圖控制器。另外,發件人viewDidTap不是視圖本身,而是識別器。因此,該方法將是這樣的:

    func viewDidTap(sender: UITapGestureRecognizer) { 
    
        let location = sender.locationInView(sender.view) 
    
        if timeView.hitTest(location, withEvent: nil) == timeView { 
    
         timeView.shadowColor = UIColor.yellowColor() 
         // table.reloadData() - you don't need to reload the table 
        } 
    } 
    
+0

謝謝,這工作。我使用了第二個選項,因爲每個單元格有兩個視圖。我仍然有一個問題,我如何讓每個視圖點擊操作頁腳單元格(它有一個DateTime選擇器)中的數據?我的想法是,我選擇一個視圖(有時間顯示它),然後滑塊應該打開,之後選擇一個新的時間將顯示在我之前選擇的視圖中。 – Glenncito

相關問題