所以,我解決了這個問題。發現一個好方法是這樣的:
1)該單元格將有一個協議。該協議將包含表示駐留視圖控制器希望的方法。更具體地:
/* .h file of cell */
@protocol LoItemViewCellDelegate <NSObject>
@optional
- (void)cell:(LoItemViewCell *)cell wantsToPresentViewController:(id)viewController;
- (void)cell:(LoItemViewCell *)cell wantsToPresentActionSheet:(UIActionSheet *)actionSheet;
@end
2)細胞必須經由其代表直接訪問的視圖控制器。否則,你會創建一個三明治邏輯,將變得不守規矩。 (如cellview-> tableview->視圖 - 控制)
3)然後調用這個方法在你的,無論你需要它叫做:
/* Inside some method in cell .m */
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:sourceType];
imagePicker.delegate = self;
[self.delegate cell:self wantsToPresentViewController:imagePicker];
4)您的委託是那麼自由地實現在任何這些方法它希望的方式。
/* Delegate view controller */
- (void)cell:(LoItemViewCell *)cell wantsToPresentViewController:(id)viewController
{
[self presentViewController:viewController animated:YES completion:nil];
}
這樣,你只沿東西細胞根本無法處理本身傳遞,而其他內容(控制邏輯等)保持與細胞。因此,舉個例子,在這個例子中,我將一個UIImagePickerController傳遞給我的委託,只是顯示,而我正在對我的單元內部的那個控制器進行所有的管理,因爲我的單元是唯一顯式的代碼片段給了一個該死的選擇器想要做的事情。
非常乾淨,我非常推薦這種方法。