2011-09-28 29 views
0

我試圖用按鈕按鈕行爲替換標準表格單元格選擇行爲。結果應該是相同的 - 推動detailViewController頂部,並提出一些詳細信息。單元格視圖是從單獨的xib文件加載的。所以,我需要在該單元格xib中放置一個按鈕,然後使用該按鈕打開表格VC中的細節VC。我已經在單元格xib中放置了按鈕視圖,並且禁用了表格VC viewDidLoad中的單元格選擇,但是現在,我不知道如何處理該按鈕按下,放置按鈕按下代碼的位置或要使用的代理方法,因爲didSelectRowAtIndexPath是不重新編程(因爲我禁用它)。有什麼建議麼?如何使用UITableViewController的按鈕實現自定義單元格選擇行爲?

更新:我需要從單元格(部分,索引)上按鈕按下一些信息,以初始化數據的細節VC。另外,應該注意,每個單元格中都會有幾個按鈕。

UPDATE2:我使用行與部分,所以按下按鈕我需要通過對應於細胞在那裏被按下的按鈕都段和行號。

UPDATE3:我試圖使用唯一標籤來識別單元格,但它看起來不是解決方案,因爲我遇到了單元格重用的問題。前9行被創建,併爲其設置相關的標籤號碼。但是,然後從隊列中重用10行中的每一行,以便使用它們的標籤獲得相同的9視圖。例如,第10行從標籤1的隊列中彈出第一行按鈕,第11行 - 第2行的標籤爲2等按鈕。我的意思是,整個出隊單元意味着你在表中有多少行沒有關係,對於所有的錶行都會有9個單元格的重用。這意味着我不能指定唯一的標籤的電池,因爲電池觀點並不爲每一行唯一

回答

1

的suggestio帶有標籤的ns由於UPDATE3中描述的原因而沒有解決問題。不過,我通過調用「magic」indexPathForRowAtPoint:方法取得了成功。因此,解決方案是:

1)將自定義方法按鈕按下的的cellForRowAtIndexPath:

// I have already created/loaded and got a handler to my button btn 
// here comes attaching 
[btn addTarget:self action:@selector(openDetailViewController:event:) forControlEvents:UIControlEventTouchUpInside]; 

2)定義自定義方法:

-(void)openDetailViewController:(id)sender event:(UIEvent *)event{ 

    NSSet *touches = [event allTouches]; 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentTouchPosition = [touch locationInView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:currentTouchPosition]; 
    // do my stuff 
} 

所以,當按鈕被按下我的方法獲取稱爲,傳遞一些額外的參數,如事件。通過調用「allTouches」和「anyObject」,我正在接觸。然後,我從該觸摸中檢索CGPoint,然後將該點傳遞給「indexPathForRowAtPoint」,該索引返回具有區段和行號的所需indexPath。酷:)

1

如果我得到烏爾問題的權利,那麼這將是解決

[cell.yourButton addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside]; 
//you can use tag property of button 
    NSUInteger tag=indexPath.row+1; 
    cell.yourButton.tag=tag; 

此代碼應在

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

&你寫行動

-(IBAction)myAction:(id)sender{ 
    UIButton *but=(UIButton *)sender; 
    NSLog(@"Tag-%d",but.tag); 
    NSUInteger index=but.tag-1; 
    //using tag you will come to know which button is pressed ... 

} 
+0

謝謝,這應該添加「myAction」方法的單元格中的所有按鈕。然而,在每一個按鈕按下我需要知道什麼細胞(indexPath.section和行號)按鈕被按下。按鈕按鈕方法的sender參數只傳遞一些關於按鈕的信息。一種解決方案是爲每個按鈕設置唯一的標籤,但我需要設置兩個數字(節號和行號),但標籤只能設置一個數字。當然,我可以使用一些智能編碼algorythmn將部分和行號綁定到一個標籤號碼中,但也許還有其他選項...? – Centurion

+0

檢查我的答案的編輯...將有幫助 – iAmitWagh

+1

設置標記= a *節+行。 a是足夠大的數量以避免相同的標籤。 – ChangUZ

相關問題