2014-01-22 69 views
0

我已經在iOS中創建了基本上是文件夾列表的屏幕。它可以包含文件和文件夾。當我點擊一個文件夾時,我希望有一個新的屏幕顯示該文件夾的內容。但是,我想用文件做幾件事情。已將UITableViewCell按鈕操作返回爲未處理觸發tableView:didSelectRowAtIndexPath

我有一個UITableView與它自己的自定義UITableViewCell。在它上面有兩個按鈕,我只想在文件行上執行操作。一個按鈕執行一個segue到另一個視圖控制器(查看屬性)。第二個按鈕執行操作(下載文件)。對於文件夾,我還將accessoryType設置爲UITableViewCellAccessoryDisclosureIndicator。還有一個tableView:didSelectRowAtIndexPath:方法執行檢查,看看它是否是一個文件夾,並顯示一個新的屏幕,如果它是。 (雖然我不知道這個檢查是否有必要,因爲它只是因爲accessoryType而被稱爲文件夾。

我的問題(我認爲)是操作順序在文件夾項目上搞亂了一些東西

在一個文件夾上,如果我點擊觸發文件的繼續按鈕,tableView:didSelectRowAtIndexPath:方法會在prepareForSegue:sender:方法之前被調用,所以我的文件夾會正確地執行它自己的segue,但是如果我點擊操作按鈕,稱爲第一個,並且tableView:didSelectRowAtIndexPath:未被調用

看起來好像UITableViewCellAccessoryDisclosureIndicator設置覆蓋了segse,但不覆蓋動作

是否可以從操作或其他可調用的方法返回結果,以指示按鈕操作未處理且父操作應該觸發?我知道這在Windows應用程序中通常是允許的,但我不知道Objective-C中是否有類似的支持。

我目前的解決方法是在操作中添加一個檢查以查看它是否爲文件夾,然後執行我通常在tableView:didSelectRowAtIndexPath:中執行的所有步驟。這有效,但我希望有一個更優雅的解決方案。我也將研究是否可以在同一個表中有兩個不同的UITableViewCell

回答

0

簡而言之,要回應您對一個表中有多種類型的UITableViewCells的最終評論,答案是肯定的。這對你的問題將是一個更清潔的解決方案。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中創建單元格時您可以使用不同的單元格標識符。

如果您使用帶有Dynamic Prototypes的UITableView,則可以向表中添加另一個單元格,並在屬性檢查器中爲其指定一個不同的標識符(重用標識符)。當您生成單元格時,只需在設置dequeueReusableCellWithIdentifier:方法時調用替代標識符即可。

+0

這是一個解決實際問題的方法,但這是我應該首先完成的工作。 –

0

我想你需要爲tableView:accessoryButtonTappedForRowWithIndexPath:函數添加處理程序,以便在用戶點擊附件按鈕時捕獲事件。如果您希望它們的行爲方式相同,最終會從此函數調用相同的代碼,並從tableView:didSelectRowAtIndexPath:中調用相同的代碼。