2013-03-15 30 views
0

我在UITableView中多行選擇的初始問題已在this問題中得到解答。但是,答案讓我無法獨立,因爲我對Objective C和iOS開發非常陌生。Objective-C:如何聲明/定義在tableView上使用的方法

daxnitro的回答,我想實現的代碼,他/她建議:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if ([tableView indexPathIsSelected:indexPath]) { 
     [tableView removeIndexPathFromSelection:indexPath]; 
    } else { 
     [tableView addIndexPathToSelection:indexPath]; 
    } 
    // Update the cell's appearance somewhere here 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
} 

我還是需要的方法,我想我能爲indexPathIsSelected做到這一點(例如)是這樣的:

@interface MyTableViewController() 
- (BOOL)indexPathIsSelected:(NSIndexPath *)indexPath; 
@end 

@implementation MyTableViewController 

// ... 

- (BOOL)indexPathIsSelected:(NSIndexPath *)indexPath 
{ 
    BOOL bIsSelected = NO; 
    // ... 
    return bIsSelected; 
} 
@end 

但這並不奏效。錯誤消息是:'UITableView'沒有可見的@interface聲明選擇器'indexPathIsSelected:'注意:如果我在.h文件的接口中聲明該方法,則會發生同樣的情況。

現在,讓我感到困惑的是:[tableView indexPathIsSelected:indexPath]以某種方式在tableView對象上調用,我甚至不知道爲什麼。我的方法聲明/定義中是否需要考慮這些內容?我現在覺得很愚蠢,甚至連看到它的調用都寫不出方法。

如何正確定義和聲明方法indexPathIsSelected,以便我可以正確使用它?

+0

請參閱:http://stackoverflow.com/questions/5375122/how-to-select-multiple-rows-in-uitableview – Mrunal 2013-03-15 16:12:34

+0

@mrunal海報有一個具體問題與他目前的做法,完全重新做它用另一種方法是矯枉過正。我認爲這是一個單線修復。 – wilsonmichaelpatrick 2013-03-15 16:14:50

回答

1

在您的didSelectRowAtIndexPath中,變量tableViewUITableView

您的indexPathIsSelected實現在MyTableViewController類,它是可能一個UITableViewController

UITableViewControllerUITableView是不同的類別。

所以你找不到方法indexPathIsSelectedUITableView,因爲它沒有在那裏實現,它在MyTableViewController這是一個不同的類實現。

所以......我打算接受一個有根據的猜測,並假設didSelectRowAtIndexPathMyTableViewController的一部分。如果是這種情況,那麼

[self indexPathIsSelected:indexPath] 

可能是答案(即調用indexPathIsSelectedself而不是表視圖)。

+0

刪除了錯誤信息,謝謝!我一直以爲我不得不在'UITableView.h'的框架中改變一些東西,並且感謝你的解釋。如果這不會導致我的理解太遠,只是爲了:'self'我參考了'MyTableViewController'和'tableView'我引用了超類'UITableView',對吧? – RNelke 2013-03-15 16:22:44

+0

你是對的:'self'是'MyTableViewController'的一個實例,它是'UITableViewController'的子類。 'tableView'是'UITableView'的一個實例。 (實際上,我*猜測你的'indexPathIsSelected'方法是在'MyTableViewController'上實現的,但它看起來像是一個正確的猜測;這是實現它的自然地點。) – wilsonmichaelpatrick 2013-03-15 16:26:11

+0

同時我運行我的代碼並最終運行。不僅它有效,而且由於你的解釋我也明白我的錯誤。非常感謝你! – RNelke 2013-03-15 16:38:50

0

您看到的錯誤消息是問題的關鍵。方法indexPathIsSelected在您的自定義類MyTableViewController中實施。但是,你擁有的UITableView顯然仍然是一個基本的UITableView。至少您需要進入故事板並將表視圖控制器對象的自定義類設置爲MyTableViewController

爲此,請打開故事板(或筆尖)並選擇表格視圖控制器。然後在身份檢查員(通常是右側)的自定義類下,從下拉列表中選擇MyTableViewController

+0

只需再次檢查它並將自定義類正確設置爲「MyTableViewController」。它以前工作過,我只是遇到了鏈接問題中提到的問題。但是,謝謝你的快速和友好的答案! – RNelke 2013-03-15 16:10:44

相關問題