首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

iOS 3D Touch 無法獲取 indexPath:忘記設定 delegate

     編輯:程式設計疑難解答

問題代碼

- (UIViewController *)previewingContext:(id)context viewControllerForLocation:(CGPoint)point {
    NSIndexPath *indexPath = [owntableView indexPathForCell:(StyleTableViewCell*)[context sourceView]];
    // indexPath 為 nil
}

原因

`context.sourceView` 返回的是觸發 3D Touch 的視圖(通常是 cell 的 `contentView` 或子視圖),**不一定是 cell 本身**。且 `owntableView` 的 `delegate`/`dataSource` 若未正確設定,`indexPathForCell:` 會返回 `nil`。

修正

  1. 確保 `owntableView.delegate = self; owntableView.dataSource = self;`(在 `viewDidLoad` 或 XIB/Storyboard 連線)。
  2. 從 `sourceView` 向上遍歷找到 cell:
UIView *view = context.sourceView;
while (view && ![view isKindOfClass:[UITableViewCell class]]) {
    view = view.superview;
}
UITableViewCell *cell = (UITableViewCell *)view;
NSIndexPath *indexPath = [owntableView indexPathForCell:cell];

記得 **delegate !!!!!!!!!!!!!!**

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved