我有自定義單元格在由自定義類(.h和.m文件)定義的UITableView中。我能夠顯示單元格,並更改列表中每個單元格的文本,但是我的自定義單元格中也有按鈕(實際上是兩個)。當我點擊按鈕時,我需要知道哪個行的按鈕已被點擊。有沒有什麼辦法可以在自定義的ui單元類中得到它?每行的按鈕UITableView
我希望我的要求很明確。如果沒有,請隨時發表評論,我會盡力解釋。
我有自定義單元格在由自定義類(.h和.m文件)定義的UITableView中。我能夠顯示單元格,並更改列表中每個單元格的文本,但是我的自定義單元格中也有按鈕(實際上是兩個)。當我點擊按鈕時,我需要知道哪個行的按鈕已被點擊。有沒有什麼辦法可以在自定義的ui單元類中得到它?每行的按鈕UITableView
我希望我的要求很明確。如果沒有,請隨時發表評論,我會盡力解釋。
您可以使用此方法:
與每個按鈕關聯的對象值。
@implementation UIButton (AssociatedObject)
-(void)setAssociatedObject:(id)object
{
objc_setAssociatedObject(self, @"_associatedObject", object, OBJC_ASSOCIATION_RETAIN_NONATOMIC) ;
}
-(id)associatedObject
{
return objc_getAssociatedObject(self, @"_associatedObject") ;
}
@end
使用此類似這樣的:你可以通過添加一個類別的UIButton
@interface UIButton (AssociatedObject)
@property (nonatomic, retain) id associatedObject ;
@end
實現支持此
myButton.associatedObject = <some object>
設置動作/目標到您的視圖控制器(或可能桌子代表)
[ myButton addTarget:<view controller> action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside ] ;
在您的操作中,查看發件人的關聯對象。發件人將是你的UIButton
-(void)buttonTapped:(UIButton*)sender
{
// retrieve object associated with the tapped button:
id associatedObject = sender.associatedObject ;
}
你不顯示任何代碼發表評論,但總體來講,您可以:
定義每個代表錶行按鈕tag
按鈕出現在哪裏;
當你的按鈕操作方法被調用時,你可以訪問按鈕的屬性tag
來知道它是哪一行。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
...
}
...
[button setTag:indexPath.row];
...
}
- (void)buttonPressedAction:(id)sender
{
UIButton *button = (UIButton *)sender;
int row = button.tag;
}
更詳盡的解決方案,看看this S.O. thread。
我已經通過爲自定義單元類創建並且然後使UIViewController
爲每個自定義單元處理UITableView
delegate
來完成此操作。
然後接上了UIButton
到IBAction
在打了一個電話給它的委託有關它或信息,我需要地作用於細胞信息的自定義單元格類。
所以我會成立一個的東西,如:
@protocol CustomCellDelegate <NSObject>
- (void) cellButtonPressed:(NSDictionary *)stuffForDelegate;
@end
然後當我在ViewController
實施cellButtonPressed:
我會用stuffForDelegate
,以確定哪些細胞是還是什麼信息,我需要採取行動。
tag
方法沒問題,但是我覺得處理所有標籤飛行的問題非常繁瑣,我更喜歡使用對象和協議以及代表。
+1爲您的按鈕指定一個標籤是要走的路。 – Stunner 2012-07-25 21:16:05
謝謝,會盡力回覆你。 :) – Kgrover 2012-07-25 21:34:12
如果用戶可以在不重新加載數據的情況下在表中插入/刪除/重新排序行,則此解決方案將不起作用。 – Argentumko 2012-11-06 08:29:55